PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Display Richtige vAnzeige von Variablen



MacGyver83
30.06.2014, 12:56
Hallo Leute,

ich hab ein kleines Problem mit der Anzeige von Variablen auf meinem LCD Display.

Follgende Komponenten sind im Einsatz:
Arduino Uno V3
LCD Display 4x20 Zeichen.

Ich nutze mehrere Analoge Eingänge und möchte nun die Ergebnise als byte Wert an das Display senden.
Das byte Wort reicht von 0-100... hier ein kleiner auszug:
...
verwendet wird LiquidCristal.h... (alles ist richtig angeschlossen und Parametriert)
...
lcd.setCursor(0,0);
lcd.print(value1);
...

Die Display Ausgabe sieht so aus:
Ist das byte auf 0 steht da
"0"
geht das byte auf 100
zeigt das Display:
"100"
geht das byte wieder auf 50 runter
steht da:
"500"
er macht die 50 plötzlich 3 Stellig mit einer Null.

Warum ist das so? ich bin echt Ratlos?!
Würde mich freuen, wenn mich einer von euch helfen könnte.

Guß Dani

Klebwax
30.06.2014, 13:05
er macht die 50 plötzlich 3 Stellig mit einer Null.

Klassisches Problem: die letzte 0 ist vom vorigen 100 schreiben übrig geblieben.

MfG Klebwax

oberallgeier
30.06.2014, 13:12
Hi Dani,

willkommen im Forum.


... er macht die 50 plötzlich 3 Stellig mit einer Null ...Nein, "er" macht das nicht, das machst schon Du. Die Ausgabe ans LCD fängt an einer bestimmbaren Stelle an, bei Dir vermutlich am Beginn der Zeile. Und die Ausgabe erfolgt ohne führende Nullen - - - und nu kommt DEIN Problem.

Von der letzten Ausgabe bleibt die Null stehen, denn wenn nun die 100 mit ner 50 überschrieben werden soll, dann steht die neue Fünf da, wo vorher die Eins stand, die Null kommt auf die alte Null (ABER das ist nun ne Null von ner Einerstelle die auf die Null von einer Zehnerstelle kommt) und die alte Null bleibt. Du kannst das quick´n´dirty ändern indem Du vor jeder Ausgabe die Zeile löscht. Oder indem Du ne Leerstelle ausgibst immer dann, wenn Du mehrstellige Zahlen ausgeben willst und rechtsbündig bleiben willst . . . (letzteres mache ich, aber nicht auf arduino, sprich in C).

Klar?

Viel Erfolg

MacGyver83
30.06.2014, 13:28
wow, das ging aber schnell...
he he, klar, da problem bin schon ich... quick'n dity mit lcd.clear() aber dann löscht er alles (nicht so schön) ... gibts da nichts eleganteres in der ArduinoIDE?
Wie müsste das in C aussehen? Vielleicht kann ich da was abschauen?

Rabenauge
30.06.2014, 15:04
Klar gehts besser-zumal das Display dir irgendwann flackern wird, wenn du zu vielers dauernd neu schreibst.
Z.B so:
if(wert<100 && wert>10)
{
lcd.setCursor(zeile, spalte+2);
lcd.print(" ");
}
if(wert<10)
{
lcd.setCursor(zeile, spalte+1);
lcd.print(" ");
}

Natürlich geht das auch rechtsbündig, indem je nach Beadrf führende Nullen davorgesetzt werden.
Verfeinert wird das Ganze dann noch, indem vor dem schreiben geprüft wird, ob die Ausgabe überhaupt neu geschrieben werden muss, also:
if(alterWert!=neuerWert)
{schreibeIhnNeu;}

Das musst du dir beizeiten angewöhnen da speziell die billigeren Displays viel zu lahmarschig sind, um sie dauernd komplett neu schreiben zu können.
Nur wenn man das effektiv erledigt, gehts flackerfei noch.

MacGyver83
01.07.2014, 07:54
Genau dieser Denkanstoß hat mir gefehlt... danke an die Experten.
...
if (value1store != value1)// überschreiben nur wenn nötig
{lcd.setCursor(valueplace,1); lcd.print(value1);//variable schreiben
if (value1 < 100 && rssivalue2 > 10)
{lcd.setCursor(valueplace+2,1); lcd.print(" ");}// alte Stellen mit " " 1 Leerzeichen löchen
if (rssivalue2 < 10){lcd.setCursor(valueplace+1,1);lcd.print(" ");}}//alte Stellen mit " " 2 Leerzeichen löschen

value1store = value1; //aktuelle variable an variablestore übergeben für Vergleich in erster Zeile

Sisor
01.07.2014, 10:58
Mir sind noch was aufgefallen:


if (value1store != value1)// überschreiben nur wenn nötig
{
lcd.setCursor(valueplace,1); lcd.print(value1); // Variable ausgeben
if (value1 < 100 && value1 >= 10)
{
lcd.setCursor(valueplace+2,1); lcd.print(" "); // alte Stellen mit " " 1 Leerzeichen löchen
}
if (value1 < 10)
{
lcd.setCursor(valueplace+1,1);lcd.print(" "); //alte Stellen mit " " 2 Leerzeichen löschen
}
}
value1store = value1; //aktuelle variable an variablestore übergeben für Vergleich in erster Zeile


oder so:



if (value1store != value1) {
lcd.setCursor(valueplace,1); lcd.print(value1); // Variable ausgeben
if (value1 < 10) lcd.print(" "); // 2 Leerzeichen
else if (value1 < 100) lcd.print(" "); // 1 Leerzeichen
}
value1store = value1;