Hallo an alle!
Habe nun das Forum schon lange durchlesen aber nix konkretes gefunden bezüglich meiner Treppenlicht-Steuerung.
Zum Einsatz kommen WS2812-LED-Module, ein Arduino UNO oder NANO, zwei PIR-Sensoren oder ähnliche Lichtschranken, ein Lichtsensor.
Funktionieren tut im Moment folgendes:
Person betritt die Treppe oben --> Stufen werden einzeln von oben zeitversetzt beleuchtet und gehen nach einer bestimmten Zeit (leider "delay-Befehl") wieder nacheinander von oben beginnend aus.
Person betritt Treppe von unten --> Stufen werden von unten nach oben zeitversetzt beleuchtet und entsprechend wieder abgeschaltet. Soweit ganz gut, aber:
Betritt von oben eine Person die Treppe und kurz drauf eine Person von unten, so steht die untere Person im Dunkeln, da der untere PIR inaktiv ist. Ist die Zeit abgelaufen dann werden die LEDs abgeschaltet und leider könnte somit die Person welche als zweites die Treppe betreten hat im Dunkeln stehen.... Voll dämlich.
Hoffe Ihr könnt mir weiter helfen....
int PIR001=10;
int PIR002=11;
int LIGHT=A0;
int PHOTO=0;
int MOVEMENT001=0;
int MOVEMENT002=0;
//
#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(20, PIN, NEO_GRB + NEO_KHZ800);
//
void setup() {
Serial.begin(9600);
pinMode(PIR001, INPUT);
pinMode(PIR002, INPUT);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
MOVEMENT001=digitalRead(PIR001);
MOVEMENT002=digitalRead(PIR002);
PHOTO=analogRead(LIGHT);
if ( MOVEMENT001 == HIGH && PHOTO <= 820) //wenn Treppe von unten betreten
{
colorWipe(strip.Color(255, 0, 0), 500); //LED nacheinander an / von unten nach oben
delay(5000);
colorWipe(strip.Color(0, 0, 0), 500); //LED nacheinander aus
}
else if (MOVEMENT002 == HIGH && PHOTO <= 820) //wenn Treppe von oben betreten
{
colorWipe2(strip.Color(0, 255, 0), 500); //LED nacheinander an / von oben nach unten
delay(5000);
colorWipe2(strip.Color(0, 0, 0), 500); //LED nacheinander aus
}
// folgende Abfrage beider PIR funktioniert nicht
else if (MOVEMENT001 == HIGH && MOVEMENT002 == HIGH && PHOTO <= 820)
{
colorWipe2(strip.Color(0, 0, 255), 500);
delay(5000);
colorWipe2(strip.Color(0, 0, 0), 500);
}
Serial.print(" - PHOTO ");
Serial.println(PHOTO);
Serial.print(" Sensor unten ");
Serial.println(MOVEMENT001);
Serial.print(" Sensor unten ");
Serial.println(MOVEMENT002);
}
void colorWipe(uint32_t c, uint8_t wait) {
for(uint16_t i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}
void colorWipe2(uint32_t c, uint8_t wait) {
for(uint16_t i=strip.numPixels(); i>0; i--) {
strip.setPixelColor(i, c);
strip.show();
delay(wait);
}
}