A sleep (or deepSleep) example with button interrupt wakeup

Dependencies:   mbed

Revision:
0:4d80b159d444
diff -r 000000000000 -r 4d80b159d444 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Sep 08 17:41:39 2014 +0000
@@ -0,0 +1,38 @@
+#include "mbed.h"
+ 
+InterruptIn event_button(USER_BUTTON);  // Create the button event object
+volatile bool go_to_sleep = false;      // Volatile variable to make the system sleep
+ 
+void ISR_pressed()                      // ISR for the button press
+{
+    printf("Button pressed\n");         // Show that the button has pressed
+    go_to_sleep = !go_to_sleep;         // Toogle the sleep state
+    event_button.disable_irq();         // Disable the interrupt request
+}
+ 
+int main()
+{
+    int i = 0;
+    
+    event_button.mode(PullUp);          // Setup the internall pull-up resistor
+    event_button.fall(&ISR_pressed);    // Set the ISR associated to event fall (push the button)
+ 
+    while(1)
+    {
+        if(go_to_sleep)
+        {
+            printf("%d: Entering sleep (press user button to resume)\n", i);
+            
+            event_button.enable_irq();  // Enable the interrupt request
+            //sleep();                  // Enter Low Power Mode
+            deepsleep();                // Enter Low Power Mode (deep)
+            wait_ms(200);               // Wait 200ms for debounce
+            event_button.enable_irq();  // Enable the interrupt request
+        }
+        else
+        {
+            printf("%d: Running\n", i); // Show the counter
+        }
+        i++;
+    }
+}