// Definiere die Pins für den Taster und die LEDs
const int buttonPin = PF0;  // Pin, an dem der Taster angeschlossen ist
const int redLEDPin = PD0;  // Pin für die rote LED
const int yellowLEDPin = PD1; // Pin für die gelbe LED
const int greenLEDPin = PD2;  // Pin für die grüne LED

// Debounce Variablen
unsigned long lastDebounceTime = 0;  // Speicherung der letzten Debounce-Zeit
unsigned long debounceDelay = 50;    // Debounce Verzögerung in Millisekunden
int buttonState = LOW;               // Aktueller Zustand des Tasters
int lastButtonState = LOW;           // Letzter gelesener Zustand des Tasters

// Variable zur Speicherung des Zustandes des Tasters
bool isSequenceActive = false;

void setup() {
  // Konfiguriere die Pin-Modi
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(redLEDPin, OUTPUT);
  pinMode(yellowLEDPin, OUTPUT);
  pinMode(greenLEDPin, OUTPUT);

  // Initialisiere die LEDs auf ausgeschaltet
  digitalWrite(redLEDPin, LOW);
  digitalWrite(yellowLEDPin, LOW);
  digitalWrite(greenLEDPin, LOW);
}

void loop() {
  // Lese den Tasterzustand
  int reading = digitalRead(buttonPin);

  // Überprüfe, ob der Tasterzustand sich vom letzten Mal geändert hat
  if (reading != lastButtonState) {
    // Reset der Debounce-Timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // Wenn der Debounce-Timer abgelaufen ist, überprüfe den Tasterzustand
    if (reading != buttonState) {
      buttonState = reading;

      // Überprüfe, ob der Taster gedrückt wurde
      if (buttonState == HIGH && !isSequenceActive) {
        isSequenceActive = true;  // Setze den Sequenz-Aktiv-Zustand

        // Starte die Sequenz
        digitalWrite(redLEDPin, HIGH);   // Rote LED an
        delay(2000);                     // Warte 2 Sekunden

        digitalWrite(yellowLEDPin, HIGH);// Gelbe LED zusätzlich an
        delay(1000);                     // Warte 1 Sekunde

        digitalWrite(redLEDPin, LOW);    // Rote LED aus
        digitalWrite(yellowLEDPin, LOW); // Gelbe LED aus
        digitalWrite(greenLEDPin, HIGH); // Grüne LED an
        delay(5000);                     // Warte 5 Sekunden

        digitalWrite(greenLEDPin, LOW);  // Grüne LED aus
        digitalWrite(yellowLEDPin, HIGH);// Gelbe LED an
        delay(1000);                     // Warte 1 Sekunde

        digitalWrite(yellowLEDPin, LOW); // Gelbe LED aus
        digitalWrite(redLEDPin, HIGH);   // Rote LED an
        delay(3000);                     // Warte 3 Sekunden

        digitalWrite(redLEDPin, LOW);    // Rote LED aus

        isSequenceActive = false;        // Setze den Sequenz-Aktiv-Zustand zurück
      }
    }
  }

  // Speichere den aktuellen Zustand als letzten Zustand
  lastButtonState = reading;
}