Wie ein LCD ansteuern ; LMC 1602 I2C ; Tutorial ; Sketch

Alles klar. Dankeschön! :slight_smile:

Also da komme ich bo#isher auch ganz gut klar, ABER... :roll_eyes:

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 ;
  
   

}