Sketch soll Funktion durch Taster starten und nach Zeit beenden

Guten Abend zusammen.

Für ein Projekt soll eine Weltkarte erstellt werden, auf der Standorte durch einen adressierbaren LED-Streifen dargestellt werden sollen.
Diese Standorte können vier Funktionen haben. Im normalen Modus sollen alle Standorte auf einmal leuchten.
Es gibt aber auch vier Taster, die nur die jeweilige Funktion darstellen sollen. Eine gewisse Zeit nach dem Tastendruck soll automatisch wieder in den normalen (alle-anzeigen)-Modus gewechselt werden.

Da das eigentliche Programm nicht funktioniert wurde das folgende Programm vereinfacht, es wurde auf zwei Funktionen reduziert und nur eine RGB-LED anstatt des LED-Streifens verwendet.

#define Taster1 6
#define Taster2 7
#define Rot 11
#define Gruen 12
#define Blau 13
int Zeit = 10;
int Warten = 0;



void setup() {
   pinMode(Taster1, INPUT_PULLUP);
   pinMode(Taster2, INPUT_PULLUP);
   pinMode(Rot, OUTPUT);
   pinMode(Gruen, OUTPUT);
   pinMode(Blau, OUTPUT);
   
}

void loop()
{
   if (Taster1 && Taster2 && Warten == 0)
   {
      digitalWrite(Rot, HIGH);
      digitalWrite(Gruen, LOW);
      digitalWrite(Blau, LOW);
    }
   
   else
   {
      if (!Taster1)
      {
        digitalWrite(Rot, LOW);
        digitalWrite(Gruen, HIGH);
        digitalWrite(Blau, LOW);
        Warten = Zeit * 10;
      }
      else if (!Taster2 ) 
      {
        digitalWrite(Rot, LOW);
        digitalWrite(Gruen, LOW);
        digitalWrite(Blau, HIGH);
        Warten = Zeit * 10;
      }
      else
      {
        digitalWrite(Rot, HIGH);
        digitalWrite(Gruen, LOW);
        digitalWrite(Blau, HIGH);
        Warten --;
      }
   }
   delay(100);
   
}

Die Taster sind durch den Pullup, solange sie nicht betätigt sind, auf HIGH. Die Variable "Warten" ist ganz am Anfang gleich 0. Dadurch sollte der if-Teil im Hauptprogramm (loop) erfüllt sein (sprich LED = Rot).

Sobald ein Taster betätigt wird (LOW), wird in den else-Teil gesprungen. Dadurch wird die jeweilige LED-Farbe ausgegeben und "Warten" auf den 10-fachen Wert der "Zeit" (10 Sekunden) gesetzt. (Durch je 0,1 Sekunde Verzögerung am Ende, so ergeben sich insgesamt wieder 10 Sekunden). Somit werden die Taster 10 mal in der Sekunde abgefragt.

Wenn der Taster wieder losgelassen wird, sollte der if-Teil nach wie vor nicht erfüllt sein (Weil "Warten" ungleich 0). Dadurch wird "Warten" solange dekrementiert, bis es 0 ist und wieder in den alle-anzeigen-modus wechselt. Diese wartezeit wird durch die "lila" LED dargestellt.

Sollte während dieser Zeit der gleiche / ein anderer Taster betätigt werden wird "Warten" wieder auf den Startwert gesetzt und die Zeit beginnt von vorne.

Soviel zur theoretischen Funkion.
Das Problem beim Testen ist, dass ich nie in den else-Teil des Hauptprogramms komme, egal, ob ich einen oder beide Taster betätige, egal, ob kurz oder lang gedrückt wird, bzw. ob High- oder Low Pegel angelegt wird (LED ist immer rot).

Ist das ein programmier- oder Verständnisfehler? Wer kann da weiterhelfen?

https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/

:frowning: Das war wieder einer von diesen S*$&/! Flüchtigkeitsfehlern. digitalRead ergänzt, getestet und funktioniert. Danke für die Hilfe. :slight_smile: