hallo! wir basteln ja an einer Wortuhr mit HL1606 würde nun gerne den Effekt dass ein Herz aufleuchtet umändern, dass man alle LEds leuchten lassen kann in weiss leider geht mir der Speicher aus es gibt den einzelnen Befehl eine Led laut Matrix leuchten zu lassen wenn ich den nun 100 x kopiere is der Speicher voll :-( der original code void heart(void) { //Die Funktion l‰sst ein Herz "aufgl¸hen" PORTD = 0b11111111; init_strip(); put_pixel_on_strip(5,8,0,1,0,0); put_pixel_on_strip(4,7,0,1,0,0); put_pixel_on_strip(6,7,0,1,0,0); put_pixel_on_strip(3,6,0,1,0,0); put_pixel_on_strip(7,6,0,1,0,0); put_pixel_on_strip(2,5,0,1,0,0); put_pixel_on_strip(8,5,0,1,0,0); put_pixel_on_strip(1,4,0,1,0,0); put_pixel_on_strip(9,4,0,1,0,0); put_pixel_on_strip(1,3,0,1,0,0); put_pixel_on_strip(9,3,0,1,0,0); put_pixel_on_strip(2,2,0,1,0,0); put_pixel_on_strip(5,2,0,1,0,0); put_pixel_on_strip(8,2,0,1,0,0); put_pixel_on_strip(3,1,0,1,0,0); put_pixel_on_strip(4,1,0,1,0,0); put_pixel_on_strip(6,1,0,1,0,0); put_pixel_on_strip(7,1,0,1,0,0); for (int i = 0; i<10; i++) { _delay_ms(2000); } if(!nightmode) { put_pixel_on_strip(5,8,2,1,0,0); put_pixel_on_strip(4,7,2,1,0,0); put_pixel_on_strip(6,7,2,1,0,0); put_pixel_on_strip(3,6,2,1,0,0); put_pixel_on_strip(7,6,2,1,0,0); put_pixel_on_strip(2,5,2,1,0,0); put_pixel_on_strip(8,5,2,1,0,0); put_pixel_on_strip(1,4,2,1,0,0); put_pixel_on_strip(9,4,2,1,0,0); put_pixel_on_strip(1,3,2,1,0,0); put_pixel_on_strip(9,3,2,1,0,0); put_pixel_on_strip(2,2,2,1,0,0); put_pixel_on_strip(5,2,2,1,0,0); put_pixel_on_strip(8,2,2,1,0,0); put_pixel_on_strip(3,1,2,1,0,0); put_pixel_on_strip(4,1,2,1,0,0); put_pixel_on_strip(6,1,2,1,0,0); put_pixel_on_strip(7,1,2,1,0,0); } _delay_ms(4000); _delay_ms(4000); init_strip(); } wichtig sind hier die ersten 2 Zahlen put_pixel_on_strip(4,7,2,1,0,0); 7 = Spalte 7 4 Pixel 4 dort gibts nen Befehl zb put_pixel_on_strip(0bis4,7-9,2,1,0,0); oder so also ne variable zahl 1 bis X dann würd ich x Zeilen sparen und es geht sich aus danke tom
keiner ne Idee was ich probieren könnte?
Also ich würde die Pixelkoordinaten in ein Array packen und mit Schleife den put_pixel_on_strip Befehl abarbeiten. Wie viele Zeilen x Spalten hat die Uhr? Wenn es nicht mehr als 16x16 sind reicht ein Byte für die Pixelkoordinate.
Tom Reiter schrieb: > oder so also ne variable zahl 1 bis X Schon mal was von for, while, until, also Schleifen programmieren? Damit kannst Du alle LED's anschmeissen. Erst denken, dann posten....
Zwei Schleifen (ungetestet):
1 | for (int i = 0; i < 5; i++) { |
2 | for (int j = 0; j < 5; j++) { |
3 | put_pixel_on_strip(i, j, 0, 0, 0, 0); |
4 | };
|
5 | };
|
Soll natürlich lauten: Schon mal was von
1 | for, while, do, |
also Schleifen programmieren gehört? War mal wieder zu schnell mit dem Absenden-Button.
is mir jetzt etwas zu verwirrend also es sollte von als Beispiel von hier put_pixel_on_strip(1,1,0,1,0,0); die erste NR 1 bis 10 anearbeitet werden also put_pixel_on_strip(2,1,0,1,0,0); put_pixel_on_strip(3,1,0,1,0,0); put_pixel_on_strip(4,1,0,1,0,0); usw sowie die zweite Zahl put_pixel_on_strip(1,2,0,1,0,0); put_pixel_on_strip(1,3,0,1,0,0); put_pixel_on_strip(1,4,0,1,0,0); bis alle leuchten und dann gehts laut code eh wieder alles aus anbei mal die ganze main
ich bin leider zu doof und weis nicht wie ich es wohin einfüge is leider so, ;-)
1 | int i,j; |
2 | for (i = 1; i < 11; i++) { // 10 Zeilen |
3 | for (j = 1; j < 11; j++) { // 10 Spalten |
4 | put_pixel_on_strip(i, j, 0, 0, 0, 0); |
5 | }
|
6 | }
|
alos wenn ich es so einfüge void ledtest(void) { //Die Funktion lässt ein Herz "aufglühen" PORTD = 0b11111111; init_strip(); int i,j; for (i = 1; i < 11; i++) { // 10 Zeilen for (j = 1; j < 11; j++) { // 10 Spalten put_pixel_on_strip(i, j, 0, 0, 0, 0); } } (int i = 0; i < 5; i++) { (int j = 0; j < 5; j++) { put_pixel_on_strip(i, j, 0, 0, 0, 0); for (int i = 0; i<10; i++) { _delay_ms(4000); } if(!nightmode) { put_pixel_on_strip(0,9,2,0,1,0); } _delay_ms(4000); _delay_ms(4000); init_strip(); } kommt leider beim kompilieren..... > "make.exe" program Compiling: main.c avr-gcc -c -mmcu=atmega8535 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -pedantic -ansi -Wa,-adhlns=main.lst -std=gnu99 -Wp,-M,-MP,-MT,main.o,-MF,.dep/main.o.d main.c -o main.o main.c: In function 'ledtest': main.c:1254: error: expected ')' before 'i' main.c:1255: error: expected ')' before 'j' main.c:1256: error: void value not ignored as it ought to be main.c:1256: error: expected '}' before ';' token main.c:1285: warning: excess elements in scalar initializer main.c:1285: warning: (near initialization for '(anonymous)') main.c:1285: error: expected '}' before 'void' main.c:2151: warning: value computed is not used main.c:2151: error: expected declaration or statement at end of input make.exe: *** [main.o] Error 1 > Process Exit Code: 2 > Time Taken: 00:01
Im zweiten Block fehlen die for Befehle. Rück mal den Code richtig ein, dann ist es übersichtlicher.
mein Fehler wenn ich es so einfüge kommt kein Fehler, es leuchten aber auch die LED nicht nur danach die eine put_pixel_on_strip(0,9,2,0,1,0); ________________________________________ void ledtest(void) { //Die Funktion lässt ein Herz "aufglühen" PORTD = 0b11111111; init_strip(); int i,j; for (i = 1; i < 11; i++) { // 10 Zeilen for (j = 1; j < 11; j++) { // 10 Spalten put_pixel_on_strip(i, j, 0, 0, 0, 0); } } for (int i = 0; i<10; i++) { _delay_ms(2000); } if(!nightmode) { put_pixel_on_strip(0,9,2,0,1,0); } _delay_ms(4000); _delay_ms(4000); init_strip(); } nach dem Einfügen sieht er so aus
Ja ok, hab alles mit Nullen gefüllt. Du wolltest ja z.B. das: put_pixel_on_strip(1,1,0,1,0,0); Also die vierte Stelle auch eine 1. Ohne die Funktion put_pixel_on_strip jetzt genauer anzusehen wird das dann zu:
1 | int i,j; |
2 | for (i = 1; i < 11; i++) { // 10 Zeilen |
3 | for (j = 1; j < 11; j++) { // 10 Spalten |
4 | put_pixel_on_strip(i, j, 0, 1, 0, 0); |
5 | }
|
6 | }
|
danke ich konnte man nun die Funktion zusammenstoppeln! danke tom
Aller Anfang ist schwer. Dranbleiben! Und ein Tutorial würde Dir sicherlich nicht schaden. C++ ist nicht gerade die einfachste aller Sprachen :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.