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);
???
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.