LCD umschalten

Hey ich habe gerade ein LCD-Displax hier welches ich via I2C an meinen arduino Mega angeschlossen habe.
Ich möchte mit einem Taster die Anzeige auf diesem Display ändern.
Sprich ich beätige den Taster und bekomm meine Anzeige.
Betätige diesen erneut und bekomm meine nächste Anzeige usw.

Ich habe schon bei meiner ersten Anzeige das Problem das ich ohne betätigung des Tasters schon etwas angezeigt bekomm.

#include <Wire.h> //Wire Bibliothek einbinden

#include <LiquidCrystal_I2C.h>//Vorher hinzugefügte LiquidCrystal_I2C //Bibliothek einbinden

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //Hier wird das Display benannt. In unserem //Fall „lcd“. Die I²C Adresse (Erläuterung und I²C Adressen Scanner in folgender Anleitung: Link zur Anleitung „2 I²C Displays gleichzeitig“) 0x27 wird auch angegeben.

int inByte=0;
int taster=2;
int tasterstatus=0;

void setup()

{

Serial.begin(9600);
pinMode(taster, INPUT);
lcd.begin(20,4); //Das Display wird gestartet und die Größe des Displays wird angegeben(Jeweils 20 Zeichen in 4 Zeilen)

lcd.backlight();//Beleuchtung des Displays einschalten

}

void loop()
{
  
{
tasterstatus=digitalRead(taster);
if (tasterstatus==HIGH)
{
lcd.setCursor(0,0); //Text soll beim ersten Zeichen in der ersten Reihe beginnen..
lcd.print("   Willkommen bei"); //In der ersten Zeile soll der Text „Test Zeile 1“ angezeigt werden
lcd.setCursor(0,1); //Genauso geht es bei den weiteren drei Zeilen weiter
lcd.print("      FS-TEST");
lcd.setCursor(0,2);
lcd.print("Taster fuer weitere");
lcd.setCursor(0,3);
lcd.print("Schritte betaetigen");
}
}
}

kann mir jemand erklären was ich falsch mach und wie ich die Umschaltung realisieren kann?

Ist vielleicht zu overkill aber schau dir das mal an, da gibts aufjedenfall dass was du hier versuchst.
http://forum.arduino.cc/index.php?topic=73816.0

wie hast du deinen Taster angeschlossen, mit Pulldown Widerstand?

Nein die eine Seite auf 3,3V die andere seite auf digital in.
Bei betätigung müsste der digitalIN dann ja ein HIGH bekommen oder funktioniert das nicht so?

wenn du keinen Pulldownwiderstand verwendest, floatet der Eingang und nimmt irgendeinen Wert an.

versuch es mal mit folgendem Sketch und schließe den Taster zwischen GND und Pin 2 an.

#include <Wire.h> //Wire Bibliothek einbinden

#include <LiquidCrystal_I2C.h>//Vorher hinzugefügte LiquidCrystal_I2C //Bibliothek einbinden

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //Hier wird das Display benannt. In unserem //Fall „lcd". Die I²C Adresse (Erläuterung und I²C Adressen Scanner in folgender Anleitung: Link zur Anleitung „2 I²C Displays gleichzeitig") 0x27 wird auch angegeben.

int inByte=0;
int taster=2;
int tasterstatus=0;

void setup()

{

Serial.begin(9600);
pinMode(taster, INPUT_PULLUP);
lcd.begin(20,4); //Das Display wird gestartet und die Größe des Displays wird angegeben(Jeweils 20 Zeichen in 4 Zeilen)

lcd.backlight();//Beleuchtung des Displays einschalten

}

void loop()
{
tasterstatus=digitalRead(taster);
if (tasterstatus==LOW)
{
lcd.setCursor(0,0); //Text soll beim ersten Zeichen in der ersten Reihe beginnen..
lcd.print("   Willkommen bei"); //In der ersten Zeile soll der Text „Test Zeile 1" angezeigt werden
lcd.setCursor(0,1); //Genauso geht es bei den weiteren drei Zeilen weiter
lcd.print("      FS-TEST");
lcd.setCursor(0,2);
lcd.print("Taster fuer weitere");
lcd.setCursor(0,3);
lcd.print("Schritte betaetigen");
}
}

Hi

Pull-UP (zieh hoch) oder Pull-Down (zieh runter) Widerstände sind dafür gedacht, einen definierten Pegel an ‘gerade nicht angesteuerte Eingänge’ zu legen.
Da die Eingänge sehr hochohmig sind, können eingefangene Störungen (blöd gesprochen: Radio) nicht abfließen und es ergibt sich eine gewisse Spannung an dem Pin (die Antenne am Autoradio macht Das genau so, nur wird diese hin und herwuselnde Spannung ‘interpretiert’ und daraus das Radio-Signal gewonnen).
Das kann der Arduino nicht und sieht ab und zu ein HIGH oder eben ein LOW, oder eben beide Zustände in rascher Folge.
Erst, wenn Du den Taster drückst, bekommst Du ein festes HIGH (Taster an Vcc) oder LOW (Taster an GND), Welches Du auswerten kannst.
Wenn jetzt der Taster wieder los gelassen wird, bleibt der Pegel noch eine Zeit auf diesem Zustand, bevor die Störungen die Oberhand gewinnen.
Mit dem Pull-Widerstand können diese Störungen abfließen bzw. das Versorgnungspotential zum Pin hin fließen.
Unbetätigt hast Du dann HIGH (PullUp) oder LOW (PullDn) am Pin, ganz ohne hin und herzappeln.

Da diese Widerstände GEGEN einen Stromfluß arbeiten, werden Diese nur mit einem I geschrieben (von wider, gegen).
Wenn Etwas wiederholt gemacht werden soll, gehört das E dabei (Immer wieder stand Er Morgens, mit Widerstand, auf :wink: ).

MfG

Vielen dank für den Tipp mit dem Pulldownwiderstand der Taster funktioniert schonmal.

versuch es mal so

/*
 *© Ardubu Dez. 2017
 *Taster wird zwischen GND und pin_x angeschlossen
 *interner Pullup Widerstand aktiviert
 *der counter zählt von 1 bis 4 jeden Tastendruck, dann fängt er wieder bei 1 an
*/
#include <Wire.h> //Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h>//Vorher hinzugefügte LiquidCrystal_I2C //Bibliothek einbinden
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //Hier wird das Display benannt. In unserem //Fall „lcd". Die I²C Adresse (Erläuterung und I²C Adressen Scanner in folgender Anleitung: Link zur Anleitung „2 I²C Displays gleichzeitig") 0x27 wird auch angegeben.
#define DEBUG //Nur zur Fehlersuche aktivieren
#define tasterPin 2 //Taster an D4 und GND
#define debounce_delay 15 //Entprellzeit für den Taster in ms
  bool led_state, tasterState, tasterState_alt;// Variablendeklaration (global)
  uint8_t counter; //Zählt wie oft die Taste gedrückt wurde
  
void setup() {
  #ifdef DEBUG
  Serial.begin(115200);
  Serial.println("Setup");
  #endif
  lcd.begin(20,4); //Das Display wird gestartet und die Größe des Displays wird angegeben(Jeweils 20 Zeichen in 4 Zeilen)
  lcd.backlight();//Beleuchtung des Displays einschalten
  pinMode(tasterPin, INPUT_PULLUP);
 }

void loop() {

 static uint32_t debounce_time;
 if (millis()-debounce_time>debounce_delay)tasterState = digitalRead(tasterPin); //einlesen des Tasters
   
 if (tasterState != tasterState_alt) // bei Pegelwechsel 
    {
     debounce_time=millis();
     #ifdef DEBUG
               Serial.println(counter);
     #endif
     if(!tasterState)//wenn Taster gedrückt
       {
        counter++;
        if(counter<2 || counter>4)counter=1;
        }
        tasterState_alt = tasterState; // state aktualisieren
        }
 if (counter ==1)
    {lcd.setCursor(0,0); //Text soll beim ersten Zeichen in der ersten Reihe beginnen..
     lcd.print("   Willkommen bei"); //In der ersten Zeile soll der Text „Test Zeile 1" angezeigt werden
    }
 if (counter ==2)
    {lcd.setCursor(0,1); //Genauso geht es bei den weiteren drei Zeilen weiter
     lcd.print("      FS-TEST");
    }
 //usw.

}//Ende loop

Ich hab mitlerweile eine Lösung gefunden ich zähl einfach wie oft der Taster gedrückt wurde.
und Je nach dem weise ich die ausgabe auf dem display zu.
ist im eigentlich ähnlich wie das was du grad gepostet hast.

ich zähl da ganze so:

{
  ButtonState = digitalRead(Button);
  if(ButtonState && ButtonState != lastState)
  {
    if(count < 255) 
      count ++; // +1 hochzählen
    else
      count = 0;  
    Serial.println(count);
  }

Hi

Wenn count als byte declariert ist, läuft Das eh über 255 auf 0 über, da nur 8bit breit.
Bei mechanischen Tastern kann Dir Prellen noch in die Quere kommen.
Auch, wenn Das akut noch nicht vor kommt, die Taster altern auch - wäre ja blöd, wenn der Code in einem halben Jahr nur noch sporadisch richtig zählt.

MfG