#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;
int lsoutput = 4;
int relay = 5;
void setup() {
Serial.begin(115200);//Start Serial Comunication
pinMode(LED_BUILTIN,OUTPUT);//We use the led on pin 13 to indecate when Arduino is A sleep
pinMode(interruptPin,INPUT_PULLUP);//Set pin d2 to input using the buildin pullup resistor
pinMode(lspwr, OUTPUT);
pinMode(lsoutput, INPUT);
pinMode(relay, OUTPUT);
digitalWrite(LED_BUILTIN,HIGH);//turning LED on
int a;
}
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
digitalWrite(LED_BUILTIN,LOW);//turning LED off
delay(1000); //wait a second to allow the led to be turned off before going to sleep
sleep_cpu();//activating sleep mode
Serial.println("just woke up!");//next line of code executed after the interrupt
digitalWrite(LED_BUILTIN,HIGH);//turning LED on
}
void wakeUp(){
Serial.println("Interrrupt Fired");//Print message to serial monitor
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
digitalWrite(LED_BUILTIN,LOW); // turn off LED
delay(1000); // wait a second to allow LED to turn off
while (digitalRead(lsoutput)==LOW) {
digitalWrite(lspower, LOW);
for (int i = 0; i < 8; i++) {
sleep_cpu(); // activate sleep mode for 8 seconds
};
digitalWrite(lspower, HIGH);
delay(50); // give ls time to pwr up
}
digitalWrite(realy, HIGH);
delay(2000); //open relay for 2 seconds
digitalWrite(relay, LOW);
}
}