Forum: Projekte & Code textausgabe


von Mike (Gast)


Lesenswert?

muss 9 textzeilen auf einem 2 zeiligen display ausgeben, wie mach ich 
das am besten?

bis jetzt sind die textzeilen als
#define  zeile1  "Willkommen"
#define zeile2  "beim Projekt der"
....
...

definiert, mit jedem tastendruck wird die erste zeile rausgeworfen die 
zweite zeile wird raufgeschoben und die dritte zeile wird in der zweite 
zeile angezeigt beim nächsten tastdruck wird gleich vorgegangen 1. zeile 
weg zweite zeile raufschieben nächste zeile als zweite zeile einblenden,
so schön so gut, bis jetzt mach ich das mit einer state-machine:
switch(pressedkey)
{
  case 0:
    show(0,0,zeile1);
    show(0,1,zeile2);
    break;
  case 1:
    show(0,0,zeile2);
    show(0,1,zeile1);
    break;
  und so weiter
}
die show funktion lautet wie folgt: show(uchar x, uchar y, uchar* 
string), aber das ist ja keine schöne lösung, gibt es keine möglichkeit 
je nachdem wie pressedkey aussieht die richtigen #defines zu nehmen und 
in zwei char reinzukopieren und dann mit auszugeben
    show(0,0,string1);
    show(0,1,string2);

???

von Sascha Weitkunat (Gast)


Lesenswert?

const unsigned char strings[9][] = {"Willkommen", "beim Projekt der", 
... };

In deinem Fall sind die defines ziemlich ünglücklich. Denn unter 
Umständen includet der Compiler an jeder Stelle wo du dein define 
verwendest den String und er sitzt somit mehrmals im Flash. Mit einem 
Array (kannst du ja per _attribute_ auch in den Flash legen) hast du 
beide Probleme gelöst, das Durchscrollen sowie die Codeoptimierung.

for (i = 0; i < 9; i++)
{
  show(0, 0, strings[i]);
  show(0, 1, strings[i+1]);

  warte_bis_der_benutzer_deine_taste_gedrueckt_hat();
}

Um das Ende musst du dich nun selbst kümmern ;) Denn wenn beim 9. 
Schleifendurchlauf i gleich 8 ist, ergibt 8+1 eine 9 welche wiederum 
ausserhalb des Arrays liegt und Fehler verursachen könnte. Desweiteren 
kann ich nicht wissen ob der Text endlos oder nur einmal loopen soll.

von Mike (Gast)


Lesenswert?

works perfect, thanks a lot

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.