Forum: Mikrocontroller und Digitale Elektronik Kann wir jemand mit einen simplen Code bei Wortuhr helfen


von Tom R. (tom_r78)


Lesenswert?

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

von Tom R. (tom_r78)


Lesenswert?

keiner ne Idee was ich probieren könnte?

von hp-freund (Gast)


Lesenswert?

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.

von FOR (Gast)


Lesenswert?

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....

von Martin S. (sirnails)


Lesenswert?

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
};

von FOR (Gast)


Lesenswert?

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.

von Tom Reiter (Gast)


Angehängte Dateien:

Lesenswert?

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

von hp-freund (Gast)


Lesenswert?


von Tom R. (tom_r78)


Lesenswert?

ich bin leider zu doof und weis nicht wie ich es wohin einfüge

is leider so, ;-)

von hp-freund (Gast)


Lesenswert?

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
}

von Tom Reiter (Gast)


Lesenswert?

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

von hp-freund (Gast)


Lesenswert?

Im zweiten Block fehlen die for Befehle.
Rück mal den Code richtig ein, dann ist es übersichtlicher.

von Tom Reiter (Gast)


Angehängte Dateien:

Lesenswert?

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

von hp-freund (Gast)


Lesenswert?

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
}

von Tom R. (tom_r78)


Lesenswert?

danke

ich konnte man nun die Funktion zusammenstoppeln!


danke
tom

von Martin S. (sirnails)


Lesenswert?

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
Noch kein Account? Hier anmelden.