#define DARK HIGH
#define LIGHT LOW
const int LDR_PIN = 4; // Pin for LDR Sensor
const int RELAY_PIN = 2; // Pin for Relay
const int BUTTON_MODE_PIN = 17; // Pin for Button Switch 1 (Mode Switch)
const int BUTTON_MANUAL_PIN = 18; // Pin for Button Switch 2 (Manual On/Off)
const int LED_RED_PIN = 22; // Pin for Red LED (Auto Mode Indicator)
const int LED_WHITE_PIN = 21; // Pin for White LED (Light Indicator)
bool isAutoMode = false; // Mode state (false = Manual, true = Auto)
bool manualLightState = false; // Manual light state
void setup() {
Serial.begin(115200);
// Set pin modes
pinMode(LDR_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(BUTTON_MODE_PIN, INPUT_PULLUP);
pinMode(BUTTON_MANUAL_PIN, INPUT_PULLUP);
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_WHITE_PIN, OUTPUT);
// Initialize outputs
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_RED_PIN, LOW);
digitalWrite(LED_WHITE_PIN, LOW);
}
void loop() {
static bool lastModeButtonState = HIGH;
static bool lastManualButtonState = HIGH;
// Read button states
bool modeButtonState = digitalRead(BUTTON_MODE_PIN);
bool manualButtonState = digitalRead(BUTTON_MANUAL_PIN);
// Handle mode switch (toggle mode)
if (modeButtonState == LOW && lastModeButtonState == HIGH) {
isAutoMode = !isAutoMode; // Toggle mode
Serial.println(isAutoMode ? "Switched to Auto Mode" : "Switched to Manual Mode");
}
lastModeButtonState = modeButtonState;
// Auto Mode
if (isAutoMode) {
digitalWrite(LED_RED_PIN, HIGH); // Turn on Red LED for Auto Mode
int lightState = digitalRead(LDR_PIN);
if (lightState == DARK) {
digitalWrite(RELAY_PIN, HIGH); // Turn on light
digitalWrite(LED_WHITE_PIN, HIGH);
Serial.println("Auto Mode: Dark! Light Open.");
} else {
digitalWrite(RELAY_PIN, LOW); // Turn off light
digitalWrite(LED_WHITE_PIN, LOW);
Serial.println("Auto Mode: Light! Light Closed.");
}
}
// Manual Mode
else {
digitalWrite(LED_RED_PIN, LOW); // Turn off Red LED for Manual Mode
// Handle manual light control
if (manualButtonState == LOW && lastManualButtonState == HIGH) {
manualLightState = !manualLightState; // Toggle light state
Serial.println(manualLightState ? "Manual Mode: Light Open" : "Manual Mode: Light Closed");
}
lastManualButtonState = manualButtonState;
// Set light based on manual state
digitalWrite(RELAY_PIN, manualLightState ? HIGH : LOW);
digitalWrite(LED_WHITE_PIN, manualLightState ? HIGH : LOW);
}
delay(100); // Debounce delay
}