Hi ich gebe Werte auf einen LCD aus und das flackert bei jeder Ausgabe. Darum wollte ich nur das LCD neu beschreiben, wenn sich einer der Werte ändert. Wie löse ich das am elegantesten?
Daniel schrieb: > So in der Art? >
1 | > if(i != i_vorher){ |
2 | > lcd_string(i); |
3 | > } |
4 | >
|
5 | >
|
fast. Nachdem du i ausgegeben hast, hast du ja ein neues i_vorher. D.h.
du musst diese Variable dann auch updaten.
Nenn die Variable nicht i_vorher, sondern irgendwie, so dass aus dem
Namen hervorgeht, dass in dieser Variablen der Wert steht, der momentan,
jetzt gerade am LCD angezeigt wird. i_shown wäre zb so was
if( value != value_shown ) {
lcd_xxxx( value );
value_shown = value;
}
Jetzt stehts mehr oder weniger im Klartext da
if( value != value_shown ) wenn der neue Wert ein anderer ist
als der der gerade angezeigt wird
lcd_xxxx( value ) dann gib den neuen Wert aus
value_shown = value und damit wird jetzt ein anderer
Wert angezeigt. Nämlich der aus
value
anstatt xxx_shown geht natürlich auch anderes. valueOnDisplay wäre zb so
ein Name, wenn auch ein wenig lang.
xxx_vorher (bzw. previous) impliziert eher, dass es sich dabei um den
unmittelbar vorher berechneten Wert handelt. Wie man ihn zbz braucht um
Pinänderungen festzustellen.
Die Kunst besteht immer darin, Variablennamen zu finden, die auch was
aussagen und nicht übermässig lang sind. Aber auch nicht zu kurz.
Allerdings entwickelt jeder Programmierer mit der Zeit seine eigene
Nomenklatur, wie er die Dinge normalerweise nennt.
Ich verwende eine Variable, zB. flag.0, wenn ich zB. Sensoren auslese oder eine Eingabe mache setze ich die auf 1, nach der Abarbeitung vom LCD wirds wieder 0. If flag.0 = 1 then LCDAusgabe else sonst nicht End If
@Karl Heinz Danke dir. @Stephan Warum machst du flag.0 und nicht nur eine Variable flag?
Daniel schrieb: > Hi ich gebe Werte auf einen LCD aus und das flackert bei jeder Ausgabe. > Darum wollte ich nur das LCD neu beschreiben, wenn sich einer der Werte > ändert. Dann flackert es nur seltener. Du dockorst an den Symptomen rum, nicht aber an der Ursache. Schmeiß das LCD_CLEAR raus, dann flackert nichts mehr.
Ralf G. schrieb: > Was deine Glaskugel so alles kann... :-) Nur simple Prozentrechnung, zu 99% liege ich richtig. Ich weiß auch nicht, warum Anfänger ständig ein LCD-Clear machen müssen. Beim einfachen Überschreiben flackert nichts.
Daniel schrieb: > Warum machst du flag.0 und nicht nur eine Variable flag? Weil er die proprietären Erweiterungen seines C-Compilers dazu nutzt, ein Bitfeld auf nicht-portable Weise anzulegen.
Peter Dannegger schrieb: > Ich weiß auch nicht, warum Anfänger ständig ein LCD-Clear machen müssen. > Beim einfachen Überschreiben flackert nichts. Damit sie das lernen. Mußte ich auch ;)
Peter Dannegger schrieb: > Ralf G. schrieb: >> Was deine Glaskugel so alles kann... :-) > > Nur simple Prozentrechnung, zu 99% liege ich richtig. > > Ich weiß auch nicht, warum Anfänger ständig ein LCD-Clear machen müssen. > Beim einfachen Überschreiben flackert nichts. Und wie machst du dass dann, wenn sich z.B. die Temperatur von 10.0°C auf 9.9°C ändert? Ich habe dann folgendes Problem: 10.0°C erste Ausgabe 9.9°C überschreiben ====== 9.9°CC Ergebnis Mich nervt das geflacker durch clr_lcd() auch. Aber mir ist keine bessere Möglichkeit eingefallen. Wäre für Tipps dankbar! Gruß Christian
Christian schrieb: > Aber mir ist keine > bessere Möglichkeit eingefallen. clreol(); aber das muß man sich selbst schreiben, ist jedoch nicht schwer. W.S.
W.S. schrieb: > Christian schrieb: >> Aber mir ist keine >> bessere Möglichkeit eingefallen. > > clreol(); > > aber das muß man sich selbst schreiben, ist jedoch nicht schwer. > > W.S. clear end of line ?! ich hatte es dann so gemacht, dass ich mir einen leeren String gemacht habe und diesen kurz vorher aufs LCD geschrieben habe. Aber das hat auch geflackert. Wenn mal wieder Langeweile aufkommt, probier ich das vielleicht mal mit so einer Funktion. Ich hatte eigentlich gehofft, dass es einen Trick für printf gibt. ;) Gruß Christian
Christian schrieb: > Und wie machst du dass dann, wenn sich z.B. die Temperatur von 10.0°C > auf 9.9°C ändert? > Ich habe dann folgendes Problem: > 10.0°C erste Ausgabe > 9.9°C überschreiben > ====== > 9.9°CC Ergebnis > > Mich nervt das geflacker durch clr_lcd() auch. Aber mir ist keine > bessere Möglichkeit eingefallen. Wenn der Wert kleiner ist als 10.0, dann gib ein führendes Leerzeichen aus. Dann bleibt auch das Komma immer an einer festen Position.
so nach dem Motto:
if (val<10.0)
printf("T= %02.1f", val);
else
printf("T= %.1f", val);
end
Geht das auch so "out of the box" mit Leerzeichen statt Nullen?
Okay ich habe meine Frage selbst beantwortet:
int main() {
float val1=9.0;
float val2=10.0;
char buffer1[10];
char buffer2[10];
sprintf(buffer1,"T=%5.2f", val1);
sprintf(buffer2,"T=%5.2f", val2);
cout<<buffer1<<endl<<buffer2<<endl;
return 0;
}
> T= 9.00
> T=10.00
funktioniert ohne führende Null!
Ich bedanke mich für den Anstoß, nochmal nachzudenken :-D
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.