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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.