LCD Ausgabe nur wenn sich Werte ändern

#3154725
Lesenswert?

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.
Gast #3165701
Lesenswert?

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
Gast #3165729
Lesenswert?

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
#3165737
Lesenswert?

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.
Gast #3165769
Lesenswert?

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

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