Einer, Zehner, Hunderter und Tausender

Hi Leute,

ich habe vor über das Arduino via LCD Display die Öltemperatur an meinem Auto auszugeben. Leider habe ich keine OBD Schnittstelle und muss demnach alles Analog machen.

Aktuell simuliere ich den Öltemperatursensor mit einem Poti. Das funktioniert auch. Aktuell sieht das so aus:

Oeltemp.: X Oeltemp.: XX Oeltemp.: XXX Oeltemp.: XXXX

Wenn die Öltemperatur steigt ist alles ok. Wenn Sie jedoch fällt, dann fängt das Board an die Einer Temperaturen folgendermaßen zu schreiben:

Oeltemp.: XYYY

An erster stelle werden dann wieder die Einer angezeigt, aber die Zehner, Hunderter und die Tausender Werte bleiben da stehen, bis der Wert hoch genug ist. Ich hoffe ich konnte das einigermaßen erklären.

Gruß

Irfan

ich gehe mal davon aus das deine Oeltemperatur maximal 3-stellig sein wird.

dann könnte man das z.B. so lösen

if (temp<100) lcd.print(“0”);
if (temp<10) lcd.print(“0”);
if (temp>0) lcd.print("+");
lcd.print (temp);

Du musst Zahlen und Text immer auf eine konstante Breite formatieren und den Rest mit Leerzeichen überschreiben:

Linksbündig:

void printNumber(int num)
{   
   lcd.print(num);

   if (num < 1000) lcd.print(' ');
   if (num < 100) lcd.print(' ');
   if (num < 10) lcd.print(' ');
}

oder den hier machen

void loop(){
 lcd.clear();

 lcd.setCursor(0, 0);
 lcd.print(F("Um Funktion zu"));
 lcd.setCursor(0, 1);
 lcd.print(F("schliessen eine"));
 lcd.setCursor(0, 2);
 lcd.print(F("Taste druecken oder"));
 lcd.setCursor(0, 3);
 lcd.print(F("Back Taste verwenden"));
}

Das blicke ich jetzt nicht ganz :confused:

das Display löschen :D

aber das macht doch für den TE keinen Sinn, weil dann ggf. alle anderen Infos auch weg sind. Und ausserdem könnte das Display flackern.

Da ist Sereniflys Lösungsvorschlag doch viel eleganter ;)

Richtig, für ein Anfänger ist es aber einfacher. Wie auch bei mir damals mit der Uhr, jede Sekunde hat das Display geflackert, ging mir irgendwann aufm sack und dann hab ichs so geändert wie in #2.

Im Fall der Öltemperatur hätte ich eine Mischung aus beidem gemacht, sprich rechtsbündig mit führenden Leerzeichen. Ist aber wie vieles Geschmacksache.

ElEspanol: rechtsbündig mit führenden Leerzeichen.

Dazu muss man ja nur die Ausgabe der Zahl und der Leerzeichen rumdrehen

Hier hatte ich mal was aufwendigeres gezeigt: http://forum.arduino.cc/index.php?topic=303009.msg2108779#msg2108779 Da kann man die Anzahl der Stellen und die Ausrichtung wählen. Etwas weiter unten ist auch eine Version für Text

Kommt in die Sammlung

Ich verstehe nicht genau wie ich deinen Code in meinen Sketch einbauen soll.

void printNumber(int num)
{   
   lcd.print(num);

   if (num < 1000) lcd.print(' ');
   if (num < 100) lcd.print(' ');
   if (num < 10) lcd.print(' ');
}

Hier mal mein Sketch:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // initialize the serial communications:
  Serial.begin(9600);
}
void loop()
{
  lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 0 setzen
  lcd.print("Oeltemp. :");                   // Temp. : auf LCD ausgeben
  lcd.setCursor(11, 0);                      // Anfang auf Stelle 11, Zeile 0 setzen
  lcd.print (analogRead(A0));
  int sensorValue = analogRead(A0);          //liest Analogeingang 0
  Serial.println(sensorValue);               //gibt Seriellen Wert aus
  delay(1000);                               //wartet 1 Sekunde zwischen den Auslesewerten
}

Ersetze

lcd.print (analogRead(A0));

durch

printNumber(analogRead(A0));
  • Semikolon am Ende ;)

Statt dem hier:

  lcd.print (analogRead(A0));
  int sensorValue = analogRead(A0);
  Serial.println(sensorValue);

So:

  int sensorValue = analogRead(A0);
  printNumber(sensorValue);
  Serial.println(sensorValue);

Das ist konsistenter

Du brauchst auch eigentlich nach dem Titel nicht nochmal setCursor() zu machen. Der Cursor wird automatisch mit jedem Zeichen eins weiter gesetzt.

Danke hat funktioniert :slight_smile:

Serenifly: + Semikolon am Ende ;)

Autsch, ja, habe ich ergänzt ;D

ElEspanol: Kommt in die Sammlung

In meiner ist es schon drin 8)