Kann wir jemand mit einen simplen Code bei Wortuhr helfen

OP #3331051
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
Gast #3331406
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.
Gast #3331460
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
Angehängte Dateien:
Gast #3331513
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
Gast #3331534
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
Angehängte Dateien:
Gast #3331633
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren