Anfänger: Servo soll erst nach LED Bewegung ausführen

Moin, ich bin Anfänger und habe erst einige kleine Dinge mit einem Arduino Uno R3 ausprobiert. Ich habe die Suchfunktion genutzt und auch die Vorschläge zu ähnlichen Themen durchforstet. Ich komme aber nicht auf die Lösung für mein derzeitiges Problem.

Aktuell bastele ich für meine Tochter ein Wichtelhaus. Es leuchten nach und nach vier Fußspuren und dann soll eine Tür sich mit Hilfe eines Servos öffnen. Das funktioniert nur noch nicht ganz so wie ich es mir vorstelle. Wenn ich den Arduino mit Strom versorge geht zuerst die Tür auf, dann leuchten die Fußspuren, dann geht die Tür zu und die Außen- und Innenbeleuchtung geht an. Reihenfolge soll aber sein: 4 Fußspuren, Tür öffnet, Sekunde Verzögerung, Tür zu, Innenraumbeleuchtung geht an. Ich versuche mal das Sketch einzubinden.:

#include <Servo.h>

const int servoPin = 9;
Servo servo;
int angle = 0;

void setup() {
  
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  servo.attach(servoPin);
  }

void loop(){

  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(7, LOW);
  delay(1000);

  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(7, LOW);
  delay(1000);

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  digitalWrite(7, LOW);
  delay(1000);

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  digitalWrite(7, LOW);
  delay(1000);

  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite (7, HIGH);
  delay(1000);

    for(angle = 0; angle < 45; angle += 1) {
      servo.write(angle);
    }
    for(angle = 45; angle > 1; angle -= 1) {
      servo.write(angle);
    }
  digitalWrite(6, HIGH);
  delay (5*60*1000);
}

Für Hilfe ist der Weihnachtswichtel sehr dankbar :slight_smile:

Hier ist der überarbeitete Sketch:

#include <Servo.h>

const int servoPin = 9;
Servo servo;

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

void setup() {
  // 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: Fußspuren nacheinander einschalten
  for (int i = 0; i < 4; i++) {
    digitalWrite(footstepPins[i], HIGH);
    delay(1000); // 1 Sekunde warten
    digitalWrite(footstepPins[i], LOW);
  }

  // Schritt 2: Tür öffnen
  servo.write(45); // Tür auf Position 45 Grad öffnen
  delay(1000);     // 1 Sekunde warten

  // Schritt 3: Tür schließen
  servo.write(0); // Tür auf Position 0 Grad schließen
  delay(1000);     // 1 Sekunde warten

  // Schritt 4: Innenraumbeleuchtung einschalten
  digitalWrite(indoorLightPin, HIGH);

  // Optional: Außenbeleuchtung anlassen (falls gewünscht)
  digitalWrite(doorLightPin, HIGH);

  // Warten, bis die nächste Schleife beginnt (z. B. 5 Minuten)
  delay(5 * 60 * 1000);
}

aus meiner Sicht macht der Sketch das was du geschrieben hast:

außer dass die Innenbeleuchtung/Außenbeleuchtung anbleibt, entspricht der Ablauf dem was du definiert hast.
Was mit Innen/Außenbeleuchtung passieren soll hast du nicht definiert.

Was soll anders sein?

Sinnvoll wäre vieleicht so ein Ablauf:
beim Start ist alles Dunkel

  • Fusschritte zum Haus
  • Außenlicht an
  • Tür auf
  • Tür zu
  • Innenlicht an
  • Außenlicht aus
  • wartezeit
  • Außenlicht an
  • Tür auf
  • Innenlicht aus
  • Tür zu
  • Schritte vom Haus weg
  • Außenlicht aus
  • längere zeit warten und wieder anfangen

Wenn man Spaß drann hat, kann man auch mehrere Wichtel zum Haus gehen lassen dann muss man halt mitzählen wie viele im Haus sind - der letzte muss das Innenlicht abdrehen.

Und nächtes Jahr was interaktives oder zufallsgesteuertes,
... sonst wird der Ablauf etwas langweilig, wenn man nach zwei/drei Durchläufen den Eindruck hat, dass es sich stur wiederholt.

Vielen Dank für die Antworten, probiere ich gerne aus. Ja, stimmt. Ich habe es nicht zu Ende definiert.

  1. Es beginnt mit vier Fußspuren. Jeder leuchtet einzeln auf. Pin 2,3,4,5
  2. Tür geht auf. Tür geht zu. Pin 9
  3. Innenraum Lampe geht an. Bleibt an. PIN 6
  4. Außenbeleuchtung geht an. Bleibt an. PIN 7
  5. 3 und 4 sollen für 5 Minuten leuchten.

Das mit mehreren Wichteln finde ich interessant. Dafür fehlt mir noch das Wissen. Ich versuche später einmal nachzuvollziehen mit dem überarbeiteten Sketch einmal nachzuvollziehen was anders ist.

Vielen Dank

hab nur einen letzten Schritt eingebaut.
Und Serial Ausgaben damit man sieht was es tun soll.
Imho macht es das was du beschreibst.

Siehe obigen Link

Vielleicht verpeil ich da etwas, aber der Sketch den Du auf Wokwi verwendest ist nicht vom TO @liftupernst sondern von @aliarifat794 .... und der macht was gewünscht ist... wenn auch blockierend.