LCD Ausgabe nur wenn sich Werte ändern

#3154725
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.
#3154811
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.
Gast #3165701
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
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
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 #3165741
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?
Gast #3165769
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.