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.