Pages: [1]   Go Down
Author Topic: S65 Display: Anzeige von 2 oder 3 stelliger Zahl.  (Read 1225 times)
0 Members and 1 Guest are viewing this topic.
Ulm
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

ich habe das Problem, dass wenn ich eine dreistellige Zahl anzeigen lasse und sich die Variable in eine zweistellige verändert, die letzte Stelle der dreistelligen Zahl weiter angezeigt wird.

Zum besseren Verständnis:
Es wird die Zahl "86" angezeigt und dieser wert steigt auf "124" an, so wird selbst verständlich die Zahl "124" angezeigt. Nun fällt der wert wieder unter 100, auf z.B. "97". Jetzt wird aber "974" angezeigt, weil die dritte Stelle nicht gelöscht wird.

Die Umwandlung und Anzeige von einer Zahl in eine Zeichenkette übernimmt.
Code:
sprintf(text, "Zahl %i", wert);
lcd.drawText(5, 50, text, 2, RGB(0,0,255), RGB(255,255,255)); //Ausgabe

Code:
lcd.clear(RGB(255,255,255));
Löscht mir selbst verständlich die ungewünschte Ziffer (bzw. alles). Aber ich bekomme dann jedes mal ein Flackern.

Vielen Dank fürs lesen und helfen.

Gruß,
Roland
Logged

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Was passiert denn, wenn Du in der Zeile mit dem sprintf zwischen %i und " noch zwei Leerzeichen einfügst? Klappts dann?
« Last Edit: April 14, 2010, 02:57:08 am by Joghurt » Logged

Ulm
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

WOW!
Das ging schnell.

Habe es gerade versucht und es funktioniert.

Ist dies die allgemein übliche Lösung? Oder aus der Not heraus gebohren?

Vielen Dank!

Gruß,
Roland
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 27
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Roland,

nein, das ist nicht die allgemein übliche Lösung. Das Problem ist folgendes:
wenn du eine 3-stellige Zahl schreibst, dann ist dein String 8 Zeichen lang. Bei einer 2-stelligen Zahl sind es nur noch 7 Zeichen und bei einer einzelnen Ziffer sogar nur 6.
Das ist erstmal nicht schlimm, aber wenn du erst 8 Zeichen schreibst und beim nächsten Mal nur 6 bleiben die beiden letzten Zeichen von der ersten Ausgabe stehen. Die werden dann von den oben empfohlenen Leerzeichen überschrieben.

Aber: Wenn du jetzt zügig von 0 bis 120 zählen lässt und wieder zurück, dann "springt" die Einerstelle beim Wechsel  zwischen 9 <-> 10 und zwischen 99 <-> 100. Besser ist es, die Zahl "vorne" mit Leerzeichen aufzufüllen.

Das kann die sprintf-Routine selber machen:

sprintf("Zahl % 3.3d", wert);

Das gibt die Zahl "wert" mit 3 Stellen und führenden Leerzeichen aus.
Wenn du lieber führende Nullen haben willst verwende

sprintf("Zahl %03.3d", wert);

Gruß
pi

EDIT: Alle Formate kann man hier nachlesen. Fließkommazahlen sind aber auf dem Arduino angeblich ein Problem.
« Last Edit: April 14, 2010, 01:03:32 pm by pi » Logged

Pages: [1]   Go Up
Jump to: