LED blinking by using deepsleep() and WakeUp. A demo written by Erik Olieman, author the WakeUp class library. Link: https://developer.mbed.org/users/Sissors/code/WakeUp/
main.cpp@0:50979b0f2f9e, 2016-01-07 (annotated)
- Committer:
- icserny
- Date:
- Thu Jan 07 14:12:28 2016 +0000
- Revision:
- 0:50979b0f2f9e
First version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
icserny | 0:50979b0f2f9e | 1 | /** 08_wakeup |
icserny | 0:50979b0f2f9e | 2 | * |
icserny | 0:50979b0f2f9e | 3 | * The LED is "off" for 2 seconds (the target spends this interval in deepsleep() mode) |
icserny | 0:50979b0f2f9e | 4 | * then the LED is "on" for the other second. Awakening is arranged by using the WakeUp |
icserny | 0:50979b0f2f9e | 5 | * class library. |
icserny | 0:50979b0f2f9e | 6 | * |
icserny | 0:50979b0f2f9e | 7 | * Author: Erik Olieman |
icserny | 0:50979b0f2f9e | 8 | * Link: https://developer.mbed.org/users/Sissors/code/WakeUp/ |
icserny | 0:50979b0f2f9e | 9 | * Minor modifications: I. Cserny |
icserny | 0:50979b0f2f9e | 10 | * |
icserny | 0:50979b0f2f9e | 11 | * A note about the implementation of the WakeUp library: |
icserny | 0:50979b0f2f9e | 12 | * ------------------------------------------------------ |
icserny | 0:50979b0f2f9e | 13 | * The KL25z target board uses the same LPTMR for both WakeUp and for ticker generation. |
icserny | 0:50979b0f2f9e | 14 | * The WakeUp code is nice, and it will backup the old values when being set, and restore |
icserny | 0:50979b0f2f9e | 15 | * those after waking up, allowing you to continue using your ticker, and a ticker which |
icserny | 0:50979b0f2f9e | 16 | * was already set will continue again. However you are not allowed to set a new ticker |
icserny | 0:50979b0f2f9e | 17 | * after you already set WakeUp, since this will give clashes. Do you for whatever reason |
icserny | 0:50979b0f2f9e | 18 | * need to do it (for example you set WakeUp, and then you wake using an InteruptIn), |
icserny | 0:50979b0f2f9e | 19 | * you can disable the WakeUp timer and restore the ticker functionality by setting |
icserny | 0:50979b0f2f9e | 20 | * WakeUp for 0 seconds. |
icserny | 0:50979b0f2f9e | 21 | */ |
icserny | 0:50979b0f2f9e | 22 | |
icserny | 0:50979b0f2f9e | 23 | #include "mbed.h" |
icserny | 0:50979b0f2f9e | 24 | #include "WakeUp.h" |
icserny | 0:50979b0f2f9e | 25 | |
icserny | 0:50979b0f2f9e | 26 | DigitalOut myled(LED1); //LED_RED |
icserny | 0:50979b0f2f9e | 27 | |
icserny | 0:50979b0f2f9e | 28 | int main() { |
icserny | 0:50979b0f2f9e | 29 | //The low-power oscillator can be quite inaccurate on some targets |
icserny | 0:50979b0f2f9e | 30 | //this function calibrates it against the main clock |
icserny | 0:50979b0f2f9e | 31 | WakeUp::calibrate(); |
icserny | 0:50979b0f2f9e | 32 | |
icserny | 0:50979b0f2f9e | 33 | while(1) { |
icserny | 0:50979b0f2f9e | 34 | myled = 1; //Switch LED off |
icserny | 0:50979b0f2f9e | 35 | WakeUp::set_ms(2000); //Set wakeup time for 2 seconds |
icserny | 0:50979b0f2f9e | 36 | deepsleep(); //Enter deepsleep mode |
icserny | 0:50979b0f2f9e | 37 | //-- zzZZ sleep here for 2 seconds ------------------- |
icserny | 0:50979b0f2f9e | 38 | myled = 0; //Switch LED on after wakeup |
icserny | 0:50979b0f2f9e | 39 | wait(1); //Run state for 1 sec |
icserny | 0:50979b0f2f9e | 40 | } |
icserny | 0:50979b0f2f9e | 41 | } |