Josh Chen
/
Nucleo_sleep
new one sleep / deepsleep and timer wakeup sample code
main.cpp@0:53ff53c686e1, 2014-11-27 (annotated)
- Committer:
- joshchen
- Date:
- Thu Nov 27 03:12:02 2014 +0000
- Revision:
- 0:53ff53c686e1
leverage https://developer.mbed.org/users/Sissors/code/WakeUp/; and original sleep sample code to make new one
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
joshchen | 0:53ff53c686e1 | 1 | #include "mbed.h" |
joshchen | 0:53ff53c686e1 | 2 | #include "WakeUp.h" |
joshchen | 0:53ff53c686e1 | 3 | |
joshchen | 0:53ff53c686e1 | 4 | InterruptIn event(USER_BUTTON); |
joshchen | 0:53ff53c686e1 | 5 | DigitalOut myled(LED1); |
joshchen | 0:53ff53c686e1 | 6 | |
joshchen | 0:53ff53c686e1 | 7 | int go_to_sleep = 0; |
joshchen | 0:53ff53c686e1 | 8 | |
joshchen | 0:53ff53c686e1 | 9 | void pressed() |
joshchen | 0:53ff53c686e1 | 10 | { |
joshchen | 0:53ff53c686e1 | 11 | printf("Button pressed\n"); |
joshchen | 0:53ff53c686e1 | 12 | go_to_sleep = !go_to_sleep; |
joshchen | 0:53ff53c686e1 | 13 | } |
joshchen | 0:53ff53c686e1 | 14 | |
joshchen | 0:53ff53c686e1 | 15 | void gotoSleep(int seconds) |
joshchen | 0:53ff53c686e1 | 16 | { |
joshchen | 0:53ff53c686e1 | 17 | //Set wakeup time for seconds |
joshchen | 0:53ff53c686e1 | 18 | int s=seconds*1000; |
joshchen | 0:53ff53c686e1 | 19 | WakeUp::set_ms(s); |
joshchen | 0:53ff53c686e1 | 20 | |
joshchen | 0:53ff53c686e1 | 21 | printf("==> Entering deepsleep until %d seconds\n", seconds); |
joshchen | 0:53ff53c686e1 | 22 | //Enter deepsleep, the program won't go beyond this point until it is woken up |
joshchen | 0:53ff53c686e1 | 23 | deepsleep(); |
joshchen | 0:53ff53c686e1 | 24 | wait(0.1); |
joshchen | 0:53ff53c686e1 | 25 | } |
joshchen | 0:53ff53c686e1 | 26 | |
joshchen | 0:53ff53c686e1 | 27 | void sleepUtilPressed() |
joshchen | 0:53ff53c686e1 | 28 | { |
joshchen | 0:53ff53c686e1 | 29 | printf("==> Entering deepsleep (press user button to resume)\n"); |
joshchen | 0:53ff53c686e1 | 30 | //sleep(); |
joshchen | 0:53ff53c686e1 | 31 | deepsleep(); |
joshchen | 0:53ff53c686e1 | 32 | wait(0.1); |
joshchen | 0:53ff53c686e1 | 33 | } |
joshchen | 0:53ff53c686e1 | 34 | |
joshchen | 0:53ff53c686e1 | 35 | int main() |
joshchen | 0:53ff53c686e1 | 36 | { |
joshchen | 0:53ff53c686e1 | 37 | int i = 0; |
joshchen | 0:53ff53c686e1 | 38 | |
joshchen | 0:53ff53c686e1 | 39 | wait(5); |
joshchen | 0:53ff53c686e1 | 40 | //The low-power oscillator can be quite inaccurate on some targets |
joshchen | 0:53ff53c686e1 | 41 | //this function calibrates it against the main clock |
joshchen | 0:53ff53c686e1 | 42 | WakeUp::calibrate(); |
joshchen | 0:53ff53c686e1 | 43 | |
joshchen | 0:53ff53c686e1 | 44 | event.fall(&pressed); |
joshchen | 0:53ff53c686e1 | 45 | |
joshchen | 0:53ff53c686e1 | 46 | while (1) { |
joshchen | 0:53ff53c686e1 | 47 | if (go_to_sleep) { |
joshchen | 0:53ff53c686e1 | 48 | myled = 0; |
joshchen | 0:53ff53c686e1 | 49 | gotoSleep(2); |
joshchen | 0:53ff53c686e1 | 50 | //sleepUtilPressed(); |
joshchen | 0:53ff53c686e1 | 51 | go_to_sleep=0; |
joshchen | 0:53ff53c686e1 | 52 | } else { |
joshchen | 0:53ff53c686e1 | 53 | printf("%d: Running\n", i); |
joshchen | 0:53ff53c686e1 | 54 | myled = !myled; |
joshchen | 0:53ff53c686e1 | 55 | wait(1.0); |
joshchen | 0:53ff53c686e1 | 56 | } |
joshchen | 0:53ff53c686e1 | 57 | i++; |
joshchen | 0:53ff53c686e1 | 58 | } |
joshchen | 0:53ff53c686e1 | 59 | } |