Alles klar. Dankeschön! ![]()
Also da komme ich bo#isher auch ganz gut klar, ABER... ![]()
Das Ganze läuft in meinem Sketch ja so ab, dass sich die Displayanzeige ändert, wenn die Messung gestartet wird.
Jetzt möchte ich mit lcd.ScrollDosplayLeft() die erste Anzeige nach links durchlaufen lassen.
Wenn ich jetzt aber zum Messen wechsle, steht die Anzeige da, wo die Laufschrift im anderen Schritt aufgehört hat, obwohl ich wieder lcd.setCursor() verwende, um den Punkt für die Schrift zu definieren.
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
// Variablendeklaration
int Echo = 12 ;
int Trigger = 11 ;
int Abstand ;
int Zeit ;
int Starttaster = 10 ;
int Schalterzustand = 0 ;
int Schalterzustand_old = 0 ;
int Start = 0 ;
int interval = 500 ;
int interval2 = 400 ;
unsigned long previous_millis = 0 ;
unsigned long Wartezeit = 0 ;
unsigned long Wartezeit_lcd = 0 ;
void setup()
{
Serial.begin (9600) ;
lcd.begin (16,2);
// Beleuchtung des Displays einschalten
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home
pinMode (Echo, INPUT) ;
pinMode (Trigger, OUTPUT) ;
}
void loop()
{
// Kontrolle ob Änderung des Eingangs
Schalterzustand = digitalRead (Starttaster) ;
if ((Schalterzustand == 1) && (Schalterzustand_old == 0))
{
Start = 1 - Start ;
delay (30) ;
}
// Messung starten
if (Start ==1)
{
Wartezeit = millis() ;
lcd.setBacklight (HIGH) ;
// Ansteuerung des Ultraschallensors
digitalWrite (Trigger, LOW) ;
delayMicroseconds (2) ;
digitalWrite (Trigger, HIGH) ;
delayMicroseconds (5) ;
digitalWrite (Trigger, LOW) ;
// Zeit in us, bis Ultraschallsignal empfangen wird auslesen
Zeit = pulseIn (Echo, HIGH) ;
// Abstandswert in mm berechnen
Abstand = (Zeit * 0.343) / 2 ;
lcd.setCursor (0,0);
lcd.print("Abstand in mm");
// Wert auf LCD alle 500 ms aktualisieren
if ((millis() - previous_millis > interval))
{
previous_millis = millis() ;
lcd.setCursor (0,1);
lcd.print(" ");
lcd.setCursor (0,1);
lcd.print(Abstand);
Serial.println (Abstand) ;
}
}
else
{
// Anzeige wenn keine Messung statt findet
lcd.setCursor (0,0) ;
lcd.print ("Fuer Messung ") ;
lcd.setCursor (0,1) ;
lcd.print ("Start druecken ") ;
// schaltet Displaybeleuchtung nach 20 Sekunden Untätigkeit ab
if (millis() - Wartezeit > 20000)
{
Wartezeit = millis() ;
lcd.setBacklight(LOW);
}
// Inhalt des Displays nach links durchlaufen lassen
if ((millis() - Wartezeit_lcd > interval2))
{
Wartezeit_lcd = millis() ;
lcd.scrollDisplayLeft() ;
}
}
Schalterzustand_old = Schalterzustand ;
}