Hallo liebe community,
ich bin gerade dabei eine Treppenhausbeleuchtung mit WS2812 LEDs aufzubauen, die automatisch mit 2 Bewegungsmeldern funktioniert solange die Beleuchtungsstärke eines Lichtsensors unterhalb eines eingestellten Schwellenwerts ist.
Der Sketch funktioniert schon ganz gut, allerdings habe ich noch einen Wunsch und weiß nicht, wie ich das realisieren kann:
aktueller Stand:
am oberen & unteren Ende der Treppe befindet sich je ein Bewegungssensor. Ein Sensor gibt ein Signal, wenn eine Bewegung detektiert wird und lässt dann ein nach Stufen gestaffeltes Lauflicht (über FastLED library) auf dem LED Strip ablaufen (je nach dem von oben oder unten). Nach einer voreingestellten Zeit wird das Lauflicht wieder ausgemacht.
Ich würde es nun gerne es so haben, dass wenn man länger auf der Treppe verweilt das Licht anbleibt, dh das Ausschalten erst dann aufgerufen wird wird, wenn jeweils der andere Sensor ebenfalls ein Signal gibt oder alternativ nach einer längeren Zeit, falls aus irgendeinem Grund kein Signal kommen sollte.
Hättet ihr hier irgendwelche Tipps?
so habe ich das ca. aktuell
void loop() {
refreshSensors(); //sensoren werden gecheckt
if (isLightvalueOk()) { //wenn es dunkel ist
if (pirTopMotionActive && !lichtan) { //oberer sensor gibt signal
moveDown();
}
if (pirBottomMotionActive && !lichtan) { //unterer sensor gibt signal
moveUp();
}
}
delay(100);
}
void moveUp() {
lightsOnUp();
refreshSensors();
delay(waitBeforeSwitchOff);
lightsOffUp();
delay(sleepAfterLightsOff);
}
void moveDown() {
lightsOnDown();
delay(waitBeforeSwitchOff);
lightsOffDown();
delay(sleepAfterLightsOff);
}
void lightsOnUp() {
for (int stufe = 1; stufe < 17; stufe++) {
int additional = 3;
additional = additional * stufe;
for (int j = 0; j < additional; j++) {
leds[j] = CRGB::Chocolate;
}
FastLED.show();
delay(switchOnDelayTimeInit);
}
lichtan = true;
}
void lightsOnDown() {
Serial.println("DOWN");
int down = NUM_LEDS - 1;
int stufe = 16;
while (stufe > 0) { //nicht fragen, warum ich hier eine while Schleife nutze. Aus irgendeinem Grund scheint eine negativ verlaufende for Schleife nicht zu funktionieren
for (int j = ((stufe - 1) * 3); j < NUM_LEDS; j++) {
leds[j] = CRGB::Chocolate;
}
FastLED.show();
delay(switchOnDelayTimeInit);
stufe--;
}
lichtan = true;
}
void lightsOffUp() {
for (int stufe = 1; stufe < 17; stufe++) {
int additional = 3;
additional = additional * stufe;
for (int j = 0; j < additional; j++) {
leds[j] = CRGB::Black;
}
FastLED.show();
delay(switchOffDelayTimeInit);
}
lichtan = false;
}
void lightsOffDown() {
int down = NUM_LEDS - 1;
int stufe = 16;
while (stufe > 0) {
for (int j = ((stufe - 1) * 3); j < NUM_LEDS; j++) {
leds[j] = CRGB::Black;
}
FastLED.show();
delay(switchOffDelayTimeInit);
stufe--;
}
lichtan = false;
}
Vielen Dank im Voraus & freundliche Grüße