Tasterabfrage läuft fehlerhaft, wer findet den Fehler

Hallo zusammen,

ich habe ein Problem. Ich möchte gerne eine Folientastatur abfragen. Da das Programm leider viel zu groß ist, habe ich hier ein kleines Beispiel, dass den Fehler zeigt. An PIN 6 ist der “SELECT”-Button angeschlossen. Mit diesem Taster möchte ich vom Automatikmodus in die “PAUSE” wechseln. Wenn ich diesen drücke, dann lande ich augenblicklich wieder in dem Automatikmodus. Ich verstehe nicht woran es liegt. Die Tastatur-Function liefert Zähler = 0 bei keinem Tastendruck. Der Wert muss mind. 25 erreichen, damit ein Sprung durchgeführt wird.

Vielen Dank für die Hilfe!

  #include <Wire.h>
  #include <LiquidCrystal_I2C.h>
  #include <EEPROM.h>

  
  
  LiquidCrystal_I2C lcd(0x27, 16, 2);

  int counter =0;              //Hilfszähler 

  int buttonState = 0;         //Variable für die Taster
  int buttonnumber;            // welcher Button soll abgefragt werden?
  int Button;                  //Button;
  int button;                  //Button;
  
  const int AUTO = 2;     // Pin an dem die AUTO Taste angeschlossen ist
  const int MENU = 3;     // Pin an dem die MENÜ Taste angeschlossen ist
  const int LEFT = 4;     // Pin an dem die LEFT Taste angeschlossen ist
  const int RIGHT = 5;    // Pin an dem die RIGHT Taste angeschlossen ist
  const int SELECT = 6;   // Pin an dem die SELECT Taste angeschlossen ist
  const int ONOFF = 7;    // Pin an dem die ONOFF Taste angeschlossen ist
  const int LED = 8;      // Pin an dem die LED angeschlossen ist

unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers
int ledState = HIGH;         // the current state of the output pin
int lastButtonState = LOW;   // the previous reading from the input pin


  
   

void setup()
 {
  //Initialisieren des Displays
  lcd.init();
  
  //Aktivieren der Hintergrundbeleuchtung
  lcd.backlight();
  

  pinMode(AUTO, INPUT);     //AUTO
  pinMode(MENU, INPUT);     //MENU
  pinMode(LEFT, INPUT);     //LEFT
  pinMode(RIGHT, INPUT);    //RIGHT
  pinMode(SELECT, INPUT);   //SELECT
  pinMode(ONOFF, INPUT);    //ON/OFF
  pinMode(LED, OUTPUT);     //LED

 }

void loop()
 {



//************************************************************************************************** 
Automatikmodus:


           Button= SELECTBUTTON2(SELECT);
//DEBUG
   lcd.setCursor(0, 0);          
   lcd.print("                ");         
   lcd.setCursor(0, 0);           
   lcd.print(Button);          
   lcd.setCursor(5, 0);           
   lcd.print(SELECT);          
   lcd.setCursor(10, 0);          
   lcd.print("AU");           



           if (Button>25)
           {
             Button=0;
             goto PAUSE;
           }


  delay(100);                 
 goto  Automatikmodus;
 



//Pause Menü
PAUSE:
   lcd.setCursor(0, 0);          
   lcd.print("PAUSE             ");           
   digitalWrite(LED, HIGH);

   lcd.print(SELECT);           


           button=SELECTBUTTON2(SELECT);
 
           lcd.setCursor(0, 0);          
           lcd.print("                ");           
           lcd.setCursor(0, 0);           
           lcd.print(Button);           
           lcd.setCursor(5, 0);           
           lcd.setCursor(10, 0);           
           lcd.print("P1");           
 
 
           if (button>25);
           {
             button=0;
             goto Automatikmodus;
           }

   delay(100);                    
  goto  PAUSE;





} //Ende VOID Main!!!!!!!!!!!!!


int SELECTBUTTON2 (int addr)
{
   int reads;
   int Erg;
   Erg=0;
   reads = digitalRead(addr); 

   if (reads==LOW)
   {
wiederholen:
     reads = digitalRead(addr); 
      if (reads==LOW)
      {
         lcd.setCursor(0, 1);           
         lcd.print("                ");           
         lcd.setCursor(0, 1);           
         lcd.print(Erg);           
        delay (10);
        Erg=Erg+1;
        goto wiederholen;
      }
      return Erg;
   } 
   Erg=0;
   delay (10);
   return Erg;
}

Ich weiß nicht, wie diese Tasten beschaltet sind.
Du verwendest nur INPUT, also müßten da extern Pullup- oder Pulldownwiderstände dran sein. Sind sie das?
Offene Eingänge wirken wie Antennen und fangen alles (Un)Mögliche ein.

Gruß Tommy

Vielen Dank für die schnelle Antwort. Extern ist die Tastatur natürlich mit PULL UP Widerständen beschaltet. Ich habe in den Code immer eine Ausgabe über den LCD eingabut, so dass ich den Inhalt der Variablen sehen kann. AU entspricht Auotmatik, P1 entspricht Pause. Da läuft scheinbar alles ganz normal. Der Zähler zählt sobald ich den Taster drück und er geht auch wieder auf 0. Aber wieso springt mein Programm erst einmal in zur Marke "PAUSE" und einfach wieder zurück zur "Automatik"? Ich verwende sogar 2 verschiedene Variablen? Mit einer klappt es übrigens auch nicht. Ich habe den Fehler nun seit ca. 2 Wochen und kann kein Workaraound machen oder ihn beheben. Wahrscheinlich ist das so ein einfacher Fehler und ich sehe ihn nicht

Meinst Du, dass die unterschiedlichen Variablen button und Button zur Verständlichkeit beitragen? Ebenso fehlt jeder sinnvolle Kommentar. Das ich Goto nicht mag, sei mal nur nebenher.
Der Code ist nicht so, dass ich mich da einlesen möchte. Evtl. findet ein anderer Gefallen daran.

Gruß Tommy

Sorry für den fehlenden Kommentar, den musste ich leider löschen, da ich sonst über 9000 Zeichen gekommen wäre. Ich dachte mir mit GOTO, dass es einfacher wäre zwischen Einstellungen, Automatik, Manuellen und Pausen Modus zu unterscheiden. Klar, das kann man auch anders lösen. Ich dachte mir, dass es so übersichtlicher ist. Es war auch kein Spaghetticode. Jeder Block wird abgearbeitet und es wird gewechselt mit dem jeweiligen Tastendruck. Wie gesagt will ich eh das ganze Programm neu strukturieren, da es sonst ausufert bzw. nicht in den Programmspeicher passt. Ich muss dazu sagen, dass ich mich umorientiere. Ich habe bisher immer in Assembler und mit PICs gearbeitet. Mir fällt der Umstieg nicht ganz so leicht.
Um das Problem einmal aufzuzeigen habe ich den Code auf das notwendige reduziert, so dass man den Fehler nachvollziehen kann.
Mit den Button und button hat es folgendes auf sich. Ich wollte sehen ob es einen Unterschied gibt in der Ausführung. Also wenn ich einfach eine neue Variable nehme. Das tut es aber nicht. Es ist egal ob so oder so. Wie gesagt habe ich das Problem seit 14 Tagen. Ich verstehe es nicht. Was ein echtes Manko an der Arduino Oberfläche ist, dass es kein DEBUG Modus gibt. Das ist schade.

Mit Serial.print kann man schon debuggen. Wie in alten Zeiten halt.

Gruß Tommy