Zum Inhalt springen

Antwort auf: Wohnhausbeleuchtung

Projekte und Tutorials für Arduino Foren StartHardware-Forum Wohnhausbeleuchtung Antwort auf: Wohnhausbeleuchtung

#7506
Stefan Hermann
Administrator

Hi Uwe,

klar, das geht. Ich hab den Code mal für einen Button angepasst. Der Button ist an Pin 2 und am GND angeschlossen. Ich hoffe, das klappt so für dich:

int ledPins[] = {3, 4, 5, 6, 7};                // Pins für die Zimmerbeleuchtung, 0 = Schlafzimmer, 1 = Küche, 2 = Esszimmer, 3 = Badezimmer, 4 = Hausnummer
int anzahlLedPins = 5;                          // Anzahl der Einträge im Array ledPins
int tvPins[] = {11, 10, 9};                     // Pins für den TV Rot, Grün, Blau

int buttonPin = 2;                              // Pin für einen Taster

int myState = 0;                                // Speichert den aktuellen Zustand der Animation
long stateDauer[] = {50000, 20000, 30000, 10000, 10000, 30000, 10000}; // Wie lange dauert der jeweilige Zustand
int stateAnzahl = 7;                            // 0 = Tag, 1 = Abendessen, 2 = TV Show, 3 = Zähneputzen, 4 = Kuschelzeit, 5 = Schlafen, 6 = Aufstehen
long currentStateTimer = 0;                     // Timer für den aktuellen Zustand

void setup() {
  randomSeed(analogRead(0));                    // Start des Zufallszahlen-Generators
  for (int i = 1; i < anzahlLedPins; i++) {     // erst ab 1, da der erste Pin (Pin 3) als analoger Output verwendet wird 
    pinMode(ledPins[i], OUTPUT);                // deklariere Pins 4 – 7 als digitale Outputs
  }
  pinMode(buttonPin, INPUT_PULLUP);             // Button mit internem Pullup wird konfiguriert
}

void loop() {
  if (currentStateTimer + stateDauer[myState] < millis()) {
    currentStateTimer = millis();               // resetted den Timer
    myState++;                                  // erhöht den aktuellen State
    if (myState >= stateAnzahl) myState = 0;    // falls myState größer als verfügbare States, dann myState=0;
  }
  
  switch (myState) {                            // Haupt-Statemachine
    case 0:                                     // State: Tag
      digitalWrite(ledPins[1], LOW);            // Küche aus
      digitalWrite(ledPins[2], LOW);            // Esszimmer aus
      digitalWrite(ledPins[3], LOW);            // Badezimmer aus
      digitalWrite(ledPins[4], LOW);            // Hausnummer aus      
      analogWrite(tvPins[0], 0);                // TV aus als Wohnzimmerbeleuchtung
      analogWrite(tvPins[1], 0);                // TV aus als Wohnzimmerbeleuchtung
      analogWrite(tvPins[2], 0);                // TV aus als Wohnzimmerbeleuchtung     
      currentStateTimer = millis();             // resettet den Timer kontinuierlich
      if (digitalRead(buttonPin)==LOW){         // wenn Taster gedrückt wird
        myState++;                              // wird der State um 1 erhöht
      }   
      break;
    case 1:                                     // State: Abendessen
      digitalWrite(ledPins[4], HIGH);           // Hausnummer an
      digitalWrite(ledPins[1], HIGH);           // Küche an
      digitalWrite(ledPins[2], HIGH);           // Esszimmer an
      break;
    case 2:                                     // State: TV Show
      digitalWrite(ledPins[2], LOW);            // Esszimmer aus
      if (random(400)==1) {                     // Licht in Küche ausschalten
        digitalWrite(ledPins[1], LOW);          // Küche aus
      }
      if (random(500)==1) {                     // Licht in Küche einschalten
        digitalWrite(ledPins[1], HIGH);         // Küche an
      }
      if (random(10)==1) analogWrite(tvPins[0], random(100,200));  // TV rot
      if (random(10)==1) analogWrite(tvPins[1], random(100,200));  // TV grün > für mehr Fussball einfach die Werte ändern ;-)
      if (random(10)==1) analogWrite(tvPins[2], random(100,200));  // TV blau
      break;
    case 3:                                     // State: Zähneputzen
      digitalWrite(ledPins[1], LOW);            // Küche aus
      digitalWrite(ledPins[2], LOW);            // Esszimmer aus
      analogWrite(tvPins[0], 0);                // TV aus
      analogWrite(tvPins[1], 0);                // TV aus
      analogWrite(tvPins[2], 0);                // TV aus
      digitalWrite(ledPins[3], HIGH);           // Badezimmer an
           
      break;
    case 4:                                     // State: Kuschelzeit?
      digitalWrite(ledPins[3], LOW);            // Badezimmer aus
      if (random(10)==1) analogWrite(ledPins[0], random(100,200));  // Schlafzimmer 
      break;
    case 5:                                     // State: Schlafen
      analogWrite(ledPins[0], 0);               // Schlafzimmer aus
      break;
    case 6:                                     // State: Aufstehen
      digitalWrite(ledPins[1], HIGH);           // Küche an
      digitalWrite(ledPins[2], HIGH);           // Esszimmer an
      digitalWrite(ledPins[3], HIGH);           // Badezimmer an
      analogWrite(tvPins[0], 255);              // TV an als Wohnzimmerbeleuchtung
      analogWrite(tvPins[1], 255);              // TV an als Wohnzimmerbeleuchtung
      analogWrite(tvPins[2], 255);              // TV an als Wohnzimmerbeleuchtung            
      break;
  }
  delay(20);                                    // kurze Pause
}

Liebe Grüße und ich würde mich über Fotos freuen: hallo@starthardware.org

Stefan