LCD Laufschrift

#1599542
Lesenswert?

Ich möchte gerne einen Text vom rechten Rand ins LCD scrollen lassen.
Dabei dachte ich mir müßte das ja simpel mit einer for-Schleife 
funktionieren:
1
        for(int x=15;x<=0;x--)
2
        {
3
          lcd_gotoxy(x,0);
4
          lcd_puts("123456789123456");
5
          _delay_ms(300);
6
        }
Nur tuts das nicht. Wieso? Weil der Text über das Display hinaus geht?
Gast #1663679
Lesenswert?

Also bei meiner Laufschrift lässt sich die Länge der Zeichen einstellen. 
Vll hilft das ja weiter. Mein Problem ist nur, dass dieses 
_delay_ms(300) in einer Schleife den Prozessor natürlich voll auslastet. 
Weiß da evtl. jemand wie man das beseitigen könnte?

void lcd_write_rot(int row, int cal, char* pText, int laenge)
{
  int offset=0;
  for(int i=0;i<strlen(pText)-laenge+1;i++)
  {
    for(int j=i;j<laenge+i;j++)
    {
      lcd_goto(row,cal+offset);//Zeichenposition setzen
      lcd_write(pText[j]);  //Zeichen schreiben
      offset++;
    }
    offset=0;
    _delay_ms(300);
  }
}
#1663692
Lesenswert?

Holland schrieb:
> Also bei meiner Laufschrift lässt sich die Länge der Zeichen einstellen.
> Vll hilft das ja weiter. Mein Problem ist nur, dass dieses
> _delay_ms(300) in einer Schleife den Prozessor natürlich voll auslastet.
> Weiß da evtl. jemand wie man das beseitigen könnte?

So wie alle _delays beseitigt werden: Mit einem Timer, der einen 
Basistakt erzeugt und völliger Umstrukturierung der 
Problemlösestrategie.
Weg von: Ich erledige eine Aufgabe indem ich morgends anfange und abends 
aufhöre.
Hin zu: Ich habe einen Zeittakt und und seh mir bei jedem Ticken dieser 
Uhr an, was es jetzt gerade zu tun gibt.

In dem Fall: Weg von for-Schleifen
Hin zu: Es ist eine 1/3 Sekunde vergangen, welcher Text muss jetzt aufs 
Display
Gast #1664007
Lesenswert?

danke... so funktionierts jetzt auch schön ohne den Prozessor ständig 
voll auszulasten ;)

wen es noch interessiert.. so siehts jetzt aus (i wird alle 300ms von 
einem timerinterrupt inkrementiert)
1
void lcd_write_rot(int row, int cal, char* pText, int laenge)
2
{
3
  cli();
4
  int offset=0;
5
  
6
  if(i==strlen(pText)-laenge+1) i=0;
7
  
8
  for(int j=i;j<laenge+i;j++)
9
  {
10
    lcd_goto(row,cal+offset);    //Zeichenposition setzen
11
    lcd_write(pText[j]);      //Zeichen schreiben
12
    offset++;
13
  }
14
  offset=0;
15
  sei();
16
}

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