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

Dependencies:   BSP_DISCO_L476VG LCD_DISCO_L476VG mbed

main.cpp

Committer:
jeromecoutant
Date:
2017-07-06
Revision:
2:3201a7da544e
Parent:
0:e99d70686026

File content as of revision 2:3201a7da544e:

#include "mbed.h"
#include "LCD_DISCO_L476VG.h"

LCD_DISCO_L476VG lcd;

DigitalOut led_green(LED1);
DigitalOut led_red(LED2);

InterruptIn joy_down(JOYSTICK_DOWN);
InterruptIn joy_up(JOYSTICK_UP);
InterruptIn joy_center(JOYSTICK_CENTER);

#define MODE_WAKEUP     0  // IDD=19mA
#define MODE_SLEEP      1  // IDD=10mA
#define MODE_DEEP_SLEEP 2  // IDD= 1mA

static int deepsleep_mode = MODE_WAKEUP;

// Used to enter in wake up mode
void wakeup_tasks()
{
    led_green = 1;
    led_red = 1;
    lcd.Clear();
    printf("WAKEUP\n");
    lcd.DisplayString((uint8_t *)"WAKEUP");
    deepsleep_mode = MODE_WAKEUP;
}

// Used to enter in deepsleep mode
void joy_down_pressed()
{
    deepsleep_mode = MODE_DEEP_SLEEP;
}

// Used to enter in sleep mode
void joy_up_pressed()
{
    deepsleep_mode = MODE_SLEEP;
}

int main()
{
    led_green = 1;
    led_red = 1;
    lcd.Clear();
    printf("HELLO\n");
    lcd.DisplayString((uint8_t *)"HELLO");

    // Configure the buttons
    joy_down.rise(&joy_down_pressed);
    joy_down.mode(PullDown);
    joy_up.rise(&joy_up_pressed);
    joy_up.mode(PullDown);
    joy_center.rise(&wakeup_tasks);
    joy_center.mode(PullDown);

    while(1) {

        if (deepsleep_mode == MODE_SLEEP) {
            lcd.Clear();
            printf("SLEEP\n");
            lcd.DisplayString((uint8_t *)"SLEEP");
            led_red = 0;
            wait(1);
            sleep();
            wakeup_tasks();
        }
        if (deepsleep_mode == MODE_DEEP_SLEEP) {
            lcd.Clear();
            printf("DEEP_SLEEP\n");
            lcd.DisplayString((uint8_t *)"DEEP");
            led_green = 0;
            wait(.1);
            deepsleep();
            wakeup_tasks();
        }
    }
}