Laufschrift auf nem GLCD (64 x 128)

Gast #5289191
Lesenswert?
• ▲
▼
Moin Moin,

ich habe gerade so ein paar Logik Probleme.
Gerade weiß ich nicht so genau wie Ich anfangen soll.

Der String sollte von rechts(128) nach links(0) scrollen..

Kann mir jemand auf die Sprünge verhelfen?
1
  char msg[] = "Last Message from WSQ3000";
2
  
3
  for(int x = 128 ; x>0 ; x--)
4
  {
5
    glcdGotoXY( row, x);
6
    _delay_ms(100);
7
  }
Gast #5289216
Lesenswert?
• ▲
▼
UnderDog schrieb:
> Kann mir jemand auf die Sprünge verhelfen?
>
> char msg[] = "Last Message
> from WSQ3000";
>
>   for(int x = 128 ; x>0 ; x--)
>   {
>     glcdGotoXY( row, x);
>     _delay_ms(100);
>   }

Yep:
Mache dir ein Konzept (nicht Programm) wie das überhaupt ausschauen 
soll, denke Dir das aus, bringe es mit Bleistift auf Papier.
Was hast Du bisher:
- Ein Array mit dem Text
- Eine For-Schleife die einmal durchlaufen wird
- Eine Subroutine die (dem Namen nach) den Cursor im LCD positioniert
- Eine Zeitverzögerung

Was willst Du?
- Eine unendlich Schleife
- die den Text auf das Display schreibt

Fange doch mal erst an den Text auf das Display auszugeben.
Dann mache das unendlich.
Dann verschiebe den Text.
Dann wiederhole das ganze wenn der Text rausgeschoben wurde.

rgds

rgds
#5289243
Lesenswert?
• ▲
▼
Hier würde der Text von rechts reinlaufen bis er dann ganz links steht. 
Wenn du möchtest, dass der Text dann auch noch links wieder raus läuft 
müsstest du das noch nach der for-Schleife einbringen, also Textlänge 
bestimmen und dann gehts eigentlich ähnlich weiter wie schon beim 
Reinlaufen lassen.
1
char msg[] = "Last Message from WSQ3000";
2
  
3
  for(int x = 128 ; x>0 ; x--)
4
  {
5
    glcdGotoXY( row, x);
6
    uint8_t cursor_position = x;
7
    uint8_t i=0;
8
    lcd_clear_line(row);
9
    while(i < 128 && cursor_position < 128 && msg[i] != '\0'){
10
      glcd_put_char(msg[i]);
11
      i++;
12
      cursor_position++;
13
    }
14
    _delay_ms(100);
15
  }
16
...
17
void glcd_clear_line(uint8_t line){
18
  glcdGottoXY(line, x);
19
  for(uint8_t i=0;i<128;i++){
20
    glcd_put_char(" ");
21
  }
22
}
Gast #5289310
Lesenswert?
• ▲
▼
M. K. schrieb:
> char msg[] = "Last Message from WSQ3000";
>
>   for(int x = 128 ; x>0 ; x--)
>   {
>     glcdGotoXY( row, x);
>     uint8_t cursor_position = x;
>     uint8_t i=0;
>     lcd_clear_line(row);
>     while(i < 128 && cursor_position < 128 && msg[i] != '\0'){
>       glcd_put_char(msg[i]);
>       i++;
>       cursor_position++;
>     }
>     _delay_ms(100);
>   }


Hier wird der Text einfach nacheinander in das Display geschrieben. Von 
links nach rechts.. nichts mit scrollen..

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.