Projekte und Tutorials für Arduino › Foren › StartHardware-Forum › Wohnhausbeleuchtung › Antwort auf: Wohnhausbeleuchtung
22. Mai 2020 um 10:15 Uhr
#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