Sensormesswert wird auf LCD - Display falsch angezeigt

Servus,
Ich stehe noch ziemlich am Anfang was arduino angeht und konnte zu folgendem Problem leider nichts finden. Vielleicht könnt ihr mir ja helfen :slight_smile:
Ich will mit einem Feuchigkeitssensor (AZ-Delivery) und einem Arduino nano die Feuchtigkeit messen und an einem Display anzeigen lassen. Das funktioniert auch "teilweise".
Am Seriellen Monitor bekomme ich den Messwert und den umgerechneten wert (map) immer korrekt angezeigt. Nur auf dem Display bekomme ich "teilweise" andere werte. Kommt mir so vor als würde eine zahl hängen bleiben. Wenn ich jetzt vor jeder Messung lcd.clear() einfüge , funktioniert alles. Woran kann das liegen ?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27,16,2);

int sensor = A6;
int messwert = 0;
int feuchte = 0;

void setup() {

lcd.begin ();
lcd.clear();
Serial.begin (9600);
pinMode (sensor, INPUT);

}

void loop() {
analogRead (sensor);
messwert = analogRead (sensor);
delay (10);
// lcd.clear();
feuchte = map (messwert, 500, 100, 0, 100);
lcd.setCursor (0,0);
lcd.print ("Feuchtigkeit:");
lcd.setCursor (0,1);
lcd.print (feuchte);
lcd.setCursor (3,1);
lcd.print ("%");
Serial.print("Messwert:");
Serial.print(messwert);
Serial.print("\t");
Serial.print("Feuchtigkeit:");
Serial.print (feuchte);
Serial.println ("%");

delay (5000);

}

Du hast die Frage doch schon selbst beantwortet. Weil die alten Zeichen stehen bleiben

Du musst Ausgaben auf eine konstante Breite formatieren. Statt immer das ganze Display zu löschen - was langsam ist und flackert - überschreibt man direkt den alten Text und füllt nur die Differenz mit Leerzeichen auf

z.B.:

void print(unsigned int value)
{
   if (value < 1000) Serial.print(' ');
   if (value < 100) Serial.print(' ');
   if (value < 10) Serial.print(' ');
   Serial.println(value);    //nur print() auf LCD
}
void loop()
{
  analogRead (sensor);
  messwert = analogRead (sensor);
  delay (10);
  feuchte = map (messwert, 500, 100, 0, 100);
  lcd.setCursor (0, 0);
  lcd.print ("Feuchtigkeit:");
  lcd.setCursor (0, 1);
  lcd.print (feuchte);
  if (feuchte < 100) lcd.print(' ');
  if (feuchte < 10) lcd.print(' ');
  lcd.setCursor (3, 1);
  lcd.print ("%");
  Serial.print("Messwert:");
  Serial.print(messwert);
  Serial.print("\t");
  Serial.print("Feuchtigkeit:");
  Serial.print (feuchte);
  Serial.println ("%");
  delay (5000);
}

Ahhh ja logisch! Danke :slight_smile:
:sweat_smile: