#define LDR_PIN A0
#define SL1 3
#define SL2 4
#define SL3 5
#define SL4 6
#define SL5 7
#define IND_DAY 9
#define IND_NIGHT 10
// Threshold: below = DARK = lights ON
#define DARK_THRESHOLD 400
// Hysteresis to avoid flickering
#define LIGHT_THRESHOLD 500
const int streetLights[] = {SL1, SL2, SL3, SL4, SL5};
const int NUM_LIGHTS = 5;
bool isNight = false;
bool lastNight = false;
unsigned long lastPrint = 0;
void setStreetLights(bool on) {
for (int i = 0; i < NUM_LIGHTS; i++) {
// Cascade ON with small delay for nice effect
if (on) {
digitalWrite(streetLights[i], HIGH);
delay(100);
} else {
digitalWrite(streetLights[i], LOW);
delay(100);
}
}
digitalWrite(IND_NIGHT, on ? HIGH : LOW);
digitalWrite(IND_DAY, on ? LOW : HIGH);
}
void setup() {
Serial.begin(9600);
for (int i = 0; i < NUM_LIGHTS; i++) {
pinMode(streetLights[i], OUTPUT);
digitalWrite(streetLights[i], LOW);
}
pinMode(IND_DAY, OUTPUT);
pinMode(IND_NIGHT, OUTPUT);
digitalWrite(IND_DAY, HIGH); // starts as day
Serial.println("=================================");
Serial.println(" Smart Street Light System");
Serial.println(" LDR Auto-Control | Arduino");
Serial.println("=================================");
Serial.println("LDR Threshold (Dark) : < 400");
Serial.println("LDR Threshold (Light): > 500");
Serial.println("Slide LDR slider in Wokwi to simulate day/night\n");
}
void loop() {
int ldrValue = analogRead(LDR_PIN);
// Hysteresis logic
if (!isNight && ldrValue < DARK_THRESHOLD) {
isNight = true;
} else if (isNight && ldrValue > LIGHT_THRESHOLD) {
isNight = false;
}
// Only act on change
if (isNight != lastNight) {
lastNight = isNight;
setStreetLights(isNight);
Serial.print("[CHANGE] It's now ");
Serial.println(isNight ? "NIGHT 🌙 — Street lights ON" : "DAY ☀️ — Street lights OFF");
}
// Print status every 2 seconds
if (millis() - lastPrint >= 2000) {
lastPrint = millis();
Serial.print("[LDR] Value: ");
Serial.print(ldrValue);
Serial.print(" | Mode: ");
Serial.print(isNight ? "NIGHT" : "DAY");
Serial.print(" | Lights: ");
Serial.println(isNight ? "ON" : "OFF");
}
delay(200);
}