Wohnhausbeleuchtung

StartHardware-Forum Wohnhausbeleuchtung

Schlagwörter: 

Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
  • Autor
    Beiträge
  • #7503
    Schulze969
    Teilnehmer

    Wie kann man in der Wohnhausbeleuchtung https://starthardware.org/wohnhausbeleuchtung-fuer-die-modellbahn/ einen Taster einfügen, damit der Loop nur losläuft wenn der Taster LOW ist?

    Uwe Forkel

    #7506
    Stefan Hermann
    Verwalter

    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

Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.