Laufschrift läuft nicht

Gast #1078663
Lesenswert?

Hallo, habe mir den folgenden Code für eine Laufschrift ausgedacht:

1
unsigned char zeile=16, marke=0, i=0;
2
char ausgabe[zeile];
3
char eingabe[] = "Keine Ahnung ";
4

5
long eingabe_laenge = strlen(eingabe);
6

7
    lcd_init();
8

9
while (1) {
10

11
  for (i=0;i<zeile;i++) {
12

13
    if (marke+i < eingabe_laenge) ausgabe[i] = eingabe[marke+i];
14
    else ausgabe[i] = eingabe[marke+i-eingabe_laenge];
15

16
  } // Ende for
17

18
  ausgabe[zeile]='\0';  // terminieren der Ausgabe !
19
  lcd_string(ausgabe);
20

21
  i=0;
22
  marke++;
23
  if (marke == eingabe_laenge) marke = 0;
24

25
  _delay_ms(1000);
26
  lcd_clear();
27

28
} // Ende while

Leider wird nur beim ersten Durchlauf der for-Schleife der Text 
hintendrangehängt. Das verstehe ich einfach nicht :-(
Wenn ich die Inkrementierung von 'marke' testweise weglasse zeigt mein 
Display nur beim ersten Durchlauf etwas an.
Kann mir vielleicht jemand auf die Sprünge helfen?

Danke schon mal,
Gruß
Thomas
Gast #1080776
Lesenswert?

Michael G. wrote:
>lcd_clear() ist eine ganz schlechte Idee... das mal nur so als gut
>gemeinten Hinweis.
Wie kann ich das besser machen?

Skua C:\> wrote:
>Erspart Verenkungen
>char eingabe[] = "Keine Ahnung Keine Ahnung ";
... wollte halt bei der Eingabe flexibel bleiben ...

>braucht man nur einmal vor den schleifen
>ausgabe[zeile]='\0';  // terminieren der Ausgabe !
Gut, danke!

Gruß Thomas
Persönliche Seite #1080985
Lesenswert?

Thomas wrote:
> Michael G. wrote:
>>lcd_clear() ist eine ganz schlechte Idee... das mal nur so als gut
>>gemeinten Hinweis.
> Wie kann ich das besser machen?

Kein Clear sondern die betroffenen Zeichen einfach ueberschreiben (wenn 
Du loeschen willst mit einem Leerzeichen). Das ist sehr viel schneller 
und fuehrt dann zu keinen Artefakten, da die clear-Operation einfach zu 
langsam ist bei diesen Controllern.
Gast #1081642
Lesenswert?

Überschreiben des Textes reicht tatsächlich, lcd_clear() braucht man 
nicht, aber dafür ein set_cursor(0,1); Naja, ist sicher schneller.
Die Eingabezeile länger als das Display zu machen erspart wohl auch 
einigen Ärger.
Terminieren von
ausgabe[zeile-1]='\0';
muß ich aber in jeder Schleife machen, sonst kommt wieder nur Unsinn 
raus.

Thomas

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