Forum: Mikrocontroller und Digitale Elektronik Laufschrift auf nem GLCD (64 x 128)


von UnderDog (Gast)


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
  }

von 6a66 (Gast)


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

von M. K. (sylaina)


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
}

von UnderDog (Gast)


Lesenswert?

M. K. schrieb:
> void glcd_clear_line(uint8_t line){
>   glcdGottoXY(line, x);
>   for(uint8_t i=0;i<128;i++){
>     glcd_put_char(" ");
>   }
> }

Soll 'x' von mir eine definierte Position sein?

von UnderDog (Gast)


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

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.