Basic example showing how to use the sleep/deepsleep modes on the DISCO_L476VG board.

Dependencies:   BSP_DISCO_L476VG LCD_DISCO_L476VG mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "LCD_DISCO_L476VG.h"
00003 
00004 LCD_DISCO_L476VG lcd;
00005 
00006 DigitalOut led_green(LED1);
00007 DigitalOut led_red(LED2);
00008 
00009 InterruptIn joy_down(JOYSTICK_DOWN);
00010 InterruptIn joy_up(JOYSTICK_UP);
00011 InterruptIn joy_center(JOYSTICK_CENTER);
00012 
00013 #define MODE_WAKEUP     0  // IDD=19mA
00014 #define MODE_SLEEP      1  // IDD=10mA
00015 #define MODE_DEEP_SLEEP 2  // IDD= 1mA
00016 
00017 static int deepsleep_mode = MODE_WAKEUP;
00018 
00019 // Used to enter in wake up mode
00020 void wakeup_tasks()
00021 {
00022     led_green = 1;
00023     led_red = 1;
00024     lcd.Clear();
00025     printf("WAKEUP\n");
00026     lcd.DisplayString((uint8_t *)"WAKEUP");
00027     deepsleep_mode = MODE_WAKEUP;
00028 }
00029 
00030 // Used to enter in deepsleep mode
00031 void joy_down_pressed()
00032 {
00033     deepsleep_mode = MODE_DEEP_SLEEP;
00034 }
00035 
00036 // Used to enter in sleep mode
00037 void joy_up_pressed()
00038 {
00039     deepsleep_mode = MODE_SLEEP;
00040 }
00041 
00042 int main()
00043 {
00044     led_green = 1;
00045     led_red = 1;
00046     lcd.Clear();
00047     printf("HELLO\n");
00048     lcd.DisplayString((uint8_t *)"HELLO");
00049 
00050     // Configure the buttons
00051     joy_down.rise(&joy_down_pressed);
00052     joy_down.mode(PullDown);
00053     joy_up.rise(&joy_up_pressed);
00054     joy_up.mode(PullDown);
00055     joy_center.rise(&wakeup_tasks);
00056     joy_center.mode(PullDown);
00057 
00058     while(1) {
00059 
00060         if (deepsleep_mode == MODE_SLEEP) {
00061             lcd.Clear();
00062             printf("SLEEP\n");
00063             lcd.DisplayString((uint8_t *)"SLEEP");
00064             led_red = 0;
00065             wait(1);
00066             sleep();
00067             wakeup_tasks();
00068         }
00069         if (deepsleep_mode == MODE_DEEP_SLEEP) {
00070             lcd.Clear();
00071             printf("DEEP_SLEEP\n");
00072             lcd.DisplayString((uint8_t *)"DEEP");
00073             led_green = 0;
00074             wait(.1);
00075             deepsleep();
00076             wakeup_tasks();
00077         }
00078     }
00079 }