Jose Rios
/
Nucleo_Sleep
A sleep (or deepSleep) example with button interrupt wakeup
Diff: main.cpp
- Revision:
- 0:4d80b159d444
--- /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++; + } +}