#define LDR_PIN A0
#define RED_PIN 9
#define GREEN_PIN 10
#define BLUE_PIN 11
#define BUZZER_PIN 4
#define DARK_THRESHOLD 700
#define DARK_DELAY 5000
#define BUZZER_DURATION 200
#define COLOR_STEP 5
#define COLOR_INTERVAL 30
unsigned long darkStart = 0;
bool nightLightOn = false;
unsigned long buzzerStart = 0;
bool buzzerOn = false;
unsigned long prevMillisColor = 0;
int phase = 0;
int rVal = 255, gVal = 0, bVal = 0;
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
unsigned long now = millis();
int luxVal = analogRead(LDR_PIN);
if (luxVal > DARK_THRESHOLD) {
if (darkStart == 0) darkStart = now;
} else {
darkStart = 0;
nightLightOn = false;
}
if (!nightLightOn && darkStart && now - darkStart >= DARK_DELAY) {
nightLightOn = true;
Serial.println("Night‑light ON");
}
if (luxVal > DARK_THRESHOLD && !buzzerOn) {
buzzerOn = true;
buzzerStart = now;
tone(BUZZER_PIN, 1000);
}
if (buzzerOn && now - buzzerStart >= BUZZER_DURATION) {
buzzerOn = false;
noTone(BUZZER_PIN);
}
if (!nightLightOn) {
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 0);
delay(10);
return;
}
if (now - prevMillisColor >= COLOR_INTERVAL) {
prevMillisColor = now;
switch (phase) {
case 0: gVal += COLOR_STEP; if (gVal >= 255) { gVal = 255; phase = 1; } break;
case 1: rVal -= COLOR_STEP; if (rVal <= 0) { rVal = 0; phase = 2; } break;
case 2: bVal += COLOR_STEP; if (bVal >= 255) { bVal = 255; phase = 3; } break;
case 3: gVal -= COLOR_STEP; if (gVal <= 0) { gVal = 0; phase = 4; } break;
case 4: rVal += COLOR_STEP; if (rVal >= 255) { rVal = 255; phase = 5; } break;
case 5: bVal -= COLOR_STEP; if (bVal <= 0) { bVal = 0; phase = 0; } break;
}
}
analogWrite(RED_PIN, rVal);
analogWrite(GREEN_PIN, gVal);
analogWrite(BLUE_PIN, bVal);
Serial.print("LDR: "); Serial.print(luxVal);
Serial.print(" | R="); Serial.print(rVal * 100L / 255); Serial.print("%");
Serial.print(" G="); Serial.print(gVal * 100L / 255); Serial.print("%");
Serial.print(" B="); Serial.print(bVal * 100L / 255); Serial.println("%");
delay(10);
}