Laufschrift läuft nicht

Gast #1078663
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
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
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
Ü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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.