Example of wake up detection for LIS2DW12 in X-NUCLEO-IKS01A3
Dependencies: X_NUCLEO_IKS01A3
Wake up Demo Application with LIS2DW12 based on sensor expansion board X-NUCLEO-IKS01A3
Main function is to show how to detect the wake up event using the sensor expansion board and send a notification using UART to a connected PC or Desktop and display it on terminal applications like TeraTerm.
After connection has been established:
- the user can try to shake the board and then view the notification using an hyper terminal. When the wake up event is detected, the LED is switched on for a while.
- the user button can be used to enable/disable the wake up detection feature.
Diff: main.cpp
- Revision:
- 5:69cd10d5ca51
- Parent:
- 0:276fc25c1c41
- Child:
- 6:57d0454ddd40
diff -r 693575dae275 -r 69cd10d5ca51 main.cpp --- a/main.cpp Mon Jun 03 09:34:12 2019 +0000 +++ b/main.cpp Wed Jul 24 15:03:42 2019 +0000 @@ -4,7 +4,7 @@ * @author SRA * @version V1.0.0 * @date 5-March-2019 - * @brief Simple Example application for using the X_NUCLEO_IKS01A3 + * @brief Simple Example application for using the X_NUCLEO_IKS01A3 * MEMS Inertial & Environmental Sensor Nucleo expansion board. ****************************************************************************** * @attention @@ -34,75 +34,78 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************** -*/ - +*/ + /* Includes */ #include "mbed.h" #include "XNucleoIKS01A3.h" - + /* Instantiate the expansion board */ static XNucleoIKS01A3 *mems_expansion_board = XNucleoIKS01A3::instance(D14, D15, D4, D5, A3, D6, A4); - + /* Retrieve the composing elements of the expansion board */ static LIS2DW12Sensor *accelerometer = mems_expansion_board->accelerometer; - + InterruptIn mybutton(USER_BUTTON); DigitalOut myled(LED1); - + volatile int mems_event = 0; volatile int toggle_wake_up_enable = 0; static int wake_up_is_enabled = 1; - + void pressed_cb(); void INT1_cb(); - + /* Simple main function */ -int main() { - /* Attach callback to User button press */ - mybutton.fall(&pressed_cb); - /* Attach callback to LIS2DW12 INT1 */ - accelerometer->attach_int1_irq(&INT1_cb); - - /* Enable LIS2DW12 accelerometer */ - accelerometer->enable_x(); - /* Enable Wake-Up Detection. */ - accelerometer->enable_wake_up_detection(); - - printf("\r\n--- Starting new run ---\r\n"); - - while(1) { - if(toggle_wake_up_enable) { - toggle_wake_up_enable = 0; - if(wake_up_is_enabled == 0) { - accelerometer->enable_wake_up_detection(); - wake_up_is_enabled = 1; - } else { - accelerometer->disable_wake_up_detection(); - wake_up_is_enabled = 0; - } +int main() +{ + /* Attach callback to User button press */ + mybutton.fall(&pressed_cb); + /* Attach callback to LIS2DW12 INT1 */ + accelerometer->attach_int1_irq(&INT1_cb); + + /* Enable LIS2DW12 accelerometer */ + accelerometer->enable_x(); + /* Enable Wake-Up Detection. */ + accelerometer->enable_wake_up_detection(); + + printf("\r\n--- Starting new run ---\r\n"); + + while (1) { + if (toggle_wake_up_enable) { + toggle_wake_up_enable = 0; + if (wake_up_is_enabled == 0) { + accelerometer->enable_wake_up_detection(); + wake_up_is_enabled = 1; + } else { + accelerometer->disable_wake_up_detection(); + wake_up_is_enabled = 0; + } + } + + if (mems_event) { + mems_event = 0; + LIS2DW12_Event_Status_t status; + accelerometer->get_event_status(&status); + if (status.WakeUpStatus) { + /* Led blinking. */ + myled = 1; + wait(0.2); + myled = 0; + + /* Output data. */ + printf("Wake Up Detected!\r\n"); + } + } } - - if (mems_event) { - mems_event = 0; - LIS2DW12_Event_Status_t status; - accelerometer->get_event_status(&status); - if (status.WakeUpStatus) { - /* Led blinking. */ - myled = 1; - wait(0.2); - myled = 0; - - /* Output data. */ - printf("Wake Up Detected!\r\n"); - } - } - } +} + +void pressed_cb() +{ + toggle_wake_up_enable = 1; } - -void pressed_cb() { - toggle_wake_up_enable = 1; + +void INT1_cb() +{ + mems_event = 1; } - -void INT1_cb() { - mems_event = 1; -}