UTFT PrintNumF()

Hallo,

ich verwende die library UTFT von Henning Karlson und habe damit ein eher „kosmetisches“ Problem wie die nachfolgenden Bilder zeigen.
Am Beispiel vom Anzeigefeld IKK wird dies deutlich, der vorangegangene Wert war 10,4°C der nachfolgende sollte eigentlich 9,7°C sein da nur eine Dezimalstelle ausgegeben wird.
Da nun vor dem Komma eine Stelle weniger ist zeigt er 9,74 an die letzte Stelle vom vorangegangenen Wert wird nicht überschrieben.
Beim Anzeigefeld PWR war dies ähnlich bzw. es wurde dadurch ein falscher Wert angezeigt ich habe dies durch löschen und neu beschreiben des Feldes wegbekommen was aber ein flackern in der Anzeige zur Folge hat.
Hat jemand von Euch dazu eine elegantere Lösung?

Nachfolgend noch den Code für die Ausgabe

Code Beispiel:

myGLCD.printNumF(ebuf.dat.temperatur, 1,39, 36);
myGLCD.printNumF(ebuf.dat.rel_feuchte,1,39,78);
myGLCD.printNumF(ebuf.dat.taupunkt,1,39,120);
myGLCD.printNumF(ebuf.dat.innenkk,1,39,162);
myGLCD.print(" ",50,204); // Wert in Anzeige löschen
myGLCD.printNumI((ebuf.dat.kuehlpwr/10),50,204);

Gruß Jürgen

Du musst den alten Wert mit der Hintergrundfarbe überschreiben und anschließend den neuen Wert richtig schreiben.
Wenn du das nicht zu oft machst und möglichst nur, wenn der Wert sich ändert, dann flackert nichts.

Hallo Dieter,

Danke für den Tipp, werde ich Morgen gleich ausprobieren. Die Anzeigewerte werden alle 5 Sekunden aktualisiert, das ist eigendlich nicht nötig alle 10 Sek. würden auch reichen. Ich melde mich wieder und schreibe Dir wie es aussieht.

Gruß Jürgen

Oder man nimmt dtostrf() um die Werte auf eine konstante Breite zu formatieren. Das Resultat ist ein C String. Dann kann man führende Leerzeichen haben und alles direkt überschreiben

Hallo Dieter,

ich habe gestern mal Deinen Vorschlag getestet aber das hatte natürlich den gleichen Effekt. Ob ich nun mit myGLCD.print(" ",50,204); den alten Wert in der Anzeige lösche oder mit myGLCD.printNumI((ebuf.dat.kuehlpwr,50,204) den alten Wert mit der Hintergrundfarbe überschreibe ändert nichts. Man sieht die aktualisierung der Anzeige flackern was beim einfachen Überschreiben überhaupt nicht in Erscheinung tritt.

Wenn es zu arg stört werde ich wie von Sereniflyvorgeschlagen mit dtostrf() die Umformatierung von float bzw. integer durchführen.

Gruß Jürgen

Gerade mal in der Doku nachgesehen. printNumI() und printNumF() können das auch selbst. Da gibt es noch zusätzliche optionale Parameter für die minimale Länge und die Füllzeichen.

Wenn du Float und Integer hast wird das das einfachste sein. Für Integer gibt es noch printf() aber das braucht viel Flash und kann auf AVRs nicht mit Float umgehen. Was eventuell stört ist dass die Füllzeichen erst nach dem Vorzeichen kommen (wenn man negative Temperaturen hat). Das ist gut so wenn man führende Nullen hat, aber evtl. nicht bei führenden Leerzeichen. Für Integer kann man sowas auch sehr einfach per Hand schreiben