Arduino Mega 2560 + LCD + Ultraschallsensor + Fotowiderstände | Werte anzeigen

Hallöchen,

ich bin gerade dabei, ein Programm zu programmieren, wobei 2 “Werte” auf der LCD angezeigt werden sollen.
Doch ich habe ein kleines Problem mit den Zeilen… Ich benutze ein 2x16 Display.
Hier einmal der Code:

// Bibliotheken-Code
#include <LiquidCrystal.h>

// initialisiert die Bibliothek mit den Nummern der Interface-Pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int trigPin = 8;
int echoPin = 7;


void setup() {
  // Angabe der Zeilen & Spalten der LCD
  lcd.begin(16, 2);
  
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
}

void loop() 
{
  float duration, inches;
  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  
  inches = duration / 74 / 2;
  
  
  
  int vallinks = analogRead(0);
  int valmitte = analogRead(1);
  int valrechts = analogRead(2);

 
  
  if (vallinks < 400 or valmitte < 400 or valrechts < 400)
  {
    
  if (vallinks < 400)
  {lcd.setCursor(0,0);
  lcd.print("Licht links!");}
  if (valmitte < 400)
  {lcd.setCursor(0,0);
  lcd.print("Licht mittig!");}
  if (valrechts < 400)
  {lcd.setCursor(0,0);
  lcd.print("Licht rechts!");}
  if (inches <= 8)
  { lcd.setCursor(0,1);
    lcd.print("zu nah!"); }
  if (inches >= 8)
  {lcd.setCursor(0,1);
  lcd.print("O.K.!");}
  
  }
  
  
  else
  lcd.clear();

Wenn ich das Programm starte und einen Fotowiderstand beleuchte, läuft in der 1. Zeile ziemlich viel Code durch.
Das Problem scheint, dass der Wert “O.K.!” oder “zu nah!” nicht nur in der 2. Zeile sondern auch in der 1. Zeile angezeigt werden.
Und da dadurch 2 Werte gleichzeitig angezeigt werden sollten, kommt es zu einem Fehler.

Doch wie bekomme ich es hin, dass der Ultraschallwert NUR in der 2. Zeile angezeigt wird ?
Ist der Befehl: “setCursor(0,2);” falsch ? Gibt es dafür einen anderen ?

Die “einzelnen” Programme getrennt laufen wunderbar, also daran liegt es nicht…

Vielleicht weiß ja jemand von euch, woran es liegen könnte.
Danke schonmal im Voraus! :wink:

cyberfrank

Bei einem 2-zeiligen LCD ist setCursor(0,2); nicht definiert.

Bei (inches == 8 ) wird die 2 Zeile flimmern,
Wenn mehr als einer der 3 analogReads < 400 liefert, flimmert die erste Zeile.

Ob man es durch zu häufiges ansteuern schafft, dass ein Text an der falschen Position erscheint, weiss ich nicht,
aber schneller als mit einem 100 msec delay kann eh keiner sehen, was auf dem Display erscheint.

Edit: Today at 06:59:54 am by uwefed

Nachtrag : Danke, Uwe. 8 ) sieht so 8) viel cooler aus .

Achso, ok Danke, für die Antwort. ;-)