// Definieren der Pins von Kranewitter
const int PIRPin = 4; // PIR Sensor Pin
const int lampPin = 5; // Lampe Pin
// Variablen für Zeitsteuerung
unsigned long lastMotionTime = 0;
unsigned long lastMotionDetectedTime = 0; // Zeitpunkt der letzten erkannten Bewegung
const long motionDelay = 5000; // 5 Sekunden an
const long dimmingTime = 2000; // 2 Sekunden dimmen
const long debounceDelay = 1000; // 1 Sekunde Debounce-Zeit
bool lampOn = false;
bool isDimming = false;
// PWM-Kanal für die LED
const int pwmChannel = 0;
const int freq = 5000; // PWM-Frequenz
const int pwmResolution = 8; // PWM-Auflösung
void setup() {
pinMode(PIRPin, INPUT);
pinMode(lampPin, OUTPUT);
// PWM-Konfiguration für die LED
ledcSetup(pwmChannel, freq, pwmResolution);
ledcAttachPin(lampPin, pwmChannel);
Serial.begin(9600);
}
void loop() {
bool motionDetected = digitalRead(PIRPin) == HIGH;
unsigned long currentTime = millis();
// Bewegungserkennung und Lampe einschalten
if (motionDetected && (currentTime - lastMotionDetectedTime > debounceDelay)) {
lastMotionDetectedTime = currentTime; // Zeitpunkt der letzten Bewegung aktualisieren
if (!lampOn || isDimming) {
lampOn = true;
isDimming = false;
lastMotionTime = currentTime; // Zeitpunkt der letzten Bewegung aktualisieren
ledcWrite(pwmChannel, 255); // Lampe auf volle Helligkeit setzen
Serial.println("Bewegung erkannt: Lampe eingeschaltet.");
}
}
// Überprüfen, ob die Lampe ausgeschaltet oder gedimmt werden soll
if (lampOn && !isDimming && currentTime - lastMotionTime > motionDelay) {
// Beginn des Dimmvorgangs
isDimming = true;
lastMotionTime = currentTime; // Dimmstartzeit aktualisieren
}
// Dimmen und Ausschalten der Lampe
if (isDimming) {
if (currentTime - lastMotionTime <= dimmingTime) {
// Dimmen der Lampe über 2 Sekunden
int dimValue = map(currentTime - lastMotionTime, 0, dimmingTime, 255, 0);
ledcWrite(pwmChannel, dimValue);
} else {
// Ausschalten der Lampe nach dem Dimmvorgang
ledcWrite(pwmChannel, 0);
lampOn = false;
isDimming = false;
Serial.println("Dimmvorgang beendet: Lampe ausgeschaltet.");
}
}
}