#include <avr/sleep.h>//this AVR library contains the methods that controls the sleep modes
#include <avr/wdt.h>
#define interruptPin 2 //Pin we are going to use to wake up the Arduino
int lspwr = 3; //to power the light sensor
int lsoutput = 4; //digital 1/0 output of the sensor
int relay = 5; // the relay that is the work of the code
int relaypwr = 6;
void setup() {
pinMode(interruptPin,INPUT_PULLUP);//Set pin d2 to input using the buildin pullup resistor
pinMode(lspwr, OUTPUT);
pinMode(lsoutput, INPUT);
pinMode(relay, OUTPUT);
pinMode(relaypwr, OUTPUT);
}
void loop() {
delay(5000);//wait 5 seconds before going to sleep
Going_To_Sleep();
}
void Going_To_Sleep(){
sleep_enable();//Enabling sleep mode
attachInterrupt(0, wakeUp, CHANGE);//attaching a interrupt to pin d2
set_sleep_mode(SLEEP_MODE_PWR_DOWN);//Setting the sleep mode, in our case full sleep
delay(1000); //wait a second to allow the led to be turned off before going to sleep
sleep_cpu();//activating sleep mode
}
void wakeUp(){
sleep_disable();//Disable sleep mode
detachInterrupt(0); //Removes the interrupt from pin 2;
sleep_enable(); // Enable sleep mode
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set sleep mode to power down
while (digitalRead(lsoutput)==LOW) {
digitalWrite(lspwr, LOW);
for (int i = 0; i < 8; i++) {
sleep_cpu(); // activate sleep mode for 8 seconds
};
digitalWrite(lspwr, HIGH);
delay(50); // give ls time to pwr up
};
sleep_disable();//Disable sleep mode
digitalWrite(relaypwr, HIGH);
delay(50);
digitalWrite(relay, HIGH);
delay(2000); //open relay for 2 seconds
digitalWrite(relay, LOW);
digitalWrite(relaypwr, LOW);
}