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
Hi Dani,
willkommen im Forum.
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.... er macht die 50 plötzlich 3 Stellig mit einer Null ...
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
Ciao sagt der JoeamBerg
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?
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.
Grüssle, Sly
..dem Inschenör ist nix zu schwör..
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
Mir sind noch was aufgefallen:
oder so:Code: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
Code: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;
Geändert von Sisor (01.07.2014 um 12:10 Uhr)
Lesezeichen