/*
  Reihenfolge soll aber sein:
  4 Fußspuren,
  Tür öffnet,
  Sekunde Verzögerung,
  Tür zu,
  Innenraumbeleuchtung geht an.

  https://forum.arduino.cc/t/anfanger-servo-soll-erst-nach-led-bewegung-ausfuhren/1322781/5
*/

#include <Servo.h>

constexpr uint8_t servoPin = 9;
Servo servo;

constexpr uint8_t footstepPins[] = {2, 3, 4, 5}; // Pins für Fußspuren
constexpr uint8_t indoorLightPin = 6;           // Pin für Innenraumbeleuchtung
constexpr uint8_t doorLightPin = 7;             // Pin für Außenbeleuchtung

void setup() {
  Serial.begin(115200);
  // Pins für Fußspuren und Beleuchtung als Ausgang setzen
  for (int i = 0; i < 4; i++) {
    pinMode(footstepPins[i], OUTPUT);
    digitalWrite(footstepPins[i], LOW);
  }
  pinMode(indoorLightPin, OUTPUT);
  pinMode(doorLightPin, OUTPUT);

  digitalWrite(indoorLightPin, LOW);
  digitalWrite(doorLightPin, LOW);

  // Servo initialisieren
  servo.attach(servoPin);
  servo.write(0); // Startposition: Tür geschlossen
}

void loop() {
  // Schritt 1:
  Serial.println(F("Es beginnt mit vier Fußspuren. Jeder leuchtet einzeln auf"));
  for (int i = 0; i < 4; i++) {
    digitalWrite(footstepPins[i], HIGH);
    delay(1000); // 1 Sekunde warten
    digitalWrite(footstepPins[i], LOW);
  }

  //Schritt 2 a
  Serial.println(F("Tür geht auf"));
  servo.write(45); // Tür auf Position 45 Grad öffnen
  delay(1000);     // 1 Sekunde warten

  //Schritt 2 b
  Serial.println(F("Tür geht zu."));
  servo.write(0); // Tür auf Position 0 Grad schließen
  delay(1000);     // 1 Sekunde warten

  // Schritt 3:
  Serial.println(F("Innenraum Lampe geht an. Bleibt an."));
  digitalWrite(indoorLightPin, HIGH);

  // Schritt 4:
  Serial.println(F("Außenbeleuchtung geht an. Bleibt an."));
  digitalWrite(doorLightPin, HIGH);

  // Schritt 5:
  Serial.println(F("3 und 4 sollen für 5 Minuten leuchten."));
  delay(1 * 60 * 1000UL);  // testweise reduziert auf 1 min ... rechne in unsigned long!

  // Schritt 6
  Serial.println(F("vorbereiten für Neustart"));
  digitalWrite(indoorLightPin, LOW);
  digitalWrite(doorLightPin, LOW);
  delay(1000);
}
//