]> git.piffa.net Git - arduino/blob - books/ArduinoNextSteps-master/ArduinoNextSteps/sketch_05_06_sleep_external_wake/sketch_05_06_sleep_external_wake.ino
lday
[arduino] / books / ArduinoNextSteps-master / ArduinoNextSteps / sketch_05_06_sleep_external_wake / sketch_05_06_sleep_external_wake.ino
1 // sketch_05_06_sleep_external_wake
2 #include <avr/sleep.h>
3
4 const int ledPin = 13;
5 const int inputPin = 2;
6
7 volatile boolean flag;
8
9 void setup() 
10 {
11   pinMode(ledPin, OUTPUT);
12   pinMode(inputPin, INPUT_PULLUP);
13   goToSleep();
14 }
15
16 void loop() 
17 {
18   if (flag)
19   {
20     doSomething();
21     flag = false;
22     goToSleep();
23   }
24 }
25
26 void setFlag()
27 {
28   flag = true; 
29 }
30
31 void goToSleep()
32 {
33    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
34    sleep_enable();
35    attachInterrupt(0, setFlag, LOW); // pin D2
36    sleep_mode(); // sleep now
37    // Now asllep until LOW interrupt, then..
38    sleep_disable();
39    detachInterrupt(0);
40 }
41
42 void doSomething()
43 {
44   for (int i = 0; i < 20; i++)
45   {
46     digitalWrite(ledPin, HIGH);
47     delay(200);
48     digitalWrite(ledPin, LOW);
49     delay(200);
50   }
51 }