Try this, you will have to alter the '#define triggerLevel 512' value to suit your circuit and it's logic may need reversing from
if (analogRead(ldrPin) < triggerLevel){
to
if (analogRead(ldrPin) > triggerLevel){
the
#define relayDelay 20UL
defines the relay delay (20 seconds) but keep the UL on the end else it may cause timing issues later in code.
#define ldrPin A0 // Pin the light dependent resistor is connected to
#define relayPin 2 // Pin relay is connected to
#define ledPin 13 // Pin LED is connected to
#define triggerLevel 512 // Levels below this threshold will trigger relay
#define relayDelay 20UL // Relay delay time in seconds
unsigned long relayOffTime = 0; // Time to turn off relay
void setup(){
//Serial.begin(115200);
pinMode(relayPin,OUTPUT);
digitalWrite(ledPin,LOW); // Turn relay off
pinMode(ledPin,OUTPUT);
digitalWrite(ledPin,LOW); // Turn LED off
}
void loop(){
if (analogRead(ldrPin) < triggerLevel){
if (relayOffTime == 0) { // Relay off time zero so relay is off and we need to turn it on
digitalWrite(ledPin,HIGH); // Turn relay on
digitalWrite(ledPin,HIGH); // Turn LED on
relayOffTime = (relayDelay * 1000UL) + millis(); // Set off time
//Serial.println("Relay On");
}
}
if (relayOffTime != 0) { // Relay off time not zero so relay is on and we need to check if it's time to turn it off
if (millis() > relayOffTime){ // Time expired?
digitalWrite(ledPin,LOW); // Turn relay off
digitalWrite(ledPin,LOW); // Turn LED off
relayOffTime = 0; // Clear off time
//Serial.println("Relay Off");
}
}
}