Example of tilt detection for LSM6DSO in X-NUCLEO-IKS01A3
Dependencies: X_NUCLEO_IKS01A3
Tilt Detection Demo Application with LSM6DSO based on sensor expansion board X-NUCLEO-IKS01A3
Main function is to show how to detect the tilt 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 tilt the board and then view the notification using an hyper terminal. When the tilt event is detected, the LED is switched on for a while.
- the user button can be used to enable/disable the tilt detection feature.
Diff: main.cpp
- Revision:
- 5:ec2f08a6c698
- Parent:
- 0:a1b39e1d2ad4
- Child:
- 6:02bfc2810faa
diff -r d8d8732faabd -r ec2f08a6c698 main.cpp --- a/main.cpp Mon Jun 03 09:44:40 2019 +0000 +++ b/main.cpp Wed Jul 24 15:00:08 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,74 +34,77 @@ * 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 LSM6DSOSensor *acc_gyro = mems_expansion_board->acc_gyro; - + InterruptIn mybutton(USER_BUTTON); DigitalOut myled(LED1); - + volatile int mems_event = 0; volatile int toggle_tilt_enable = 0; static int tilt_is_enabled = 1; - + /* User button callback. */ -void pressed_cb() { - toggle_tilt_enable = 1; +void pressed_cb() +{ + toggle_tilt_enable = 1; } - + /* Interrupt 1 callback. */ -void int1_cb() { - mems_event = 1; +void int1_cb() +{ + mems_event = 1; } - + /* Simple main function */ -int main() { - /* Attach callback to User button press */ - mybutton.fall(&pressed_cb); - /* Attach callback to LSM6DSO INT1 */ - acc_gyro->attach_int1_irq(&int1_cb); - - /* Enable LSM6DSO accelerometer */ - acc_gyro->enable_x(); - /* Enable Tilt Detection. */ - acc_gyro->enable_tilt_detection(); - - printf("\r\n--- Starting new run ---\r\n"); - - while(1) { - if(toggle_tilt_enable) { - toggle_tilt_enable = 0; - if(tilt_is_enabled == 0) { - acc_gyro->enable_tilt_detection(); - tilt_is_enabled = 1; - } else { - acc_gyro->disable_tilt_detection(); - tilt_is_enabled = 0; - } +int main() +{ + /* Attach callback to User button press */ + mybutton.fall(&pressed_cb); + /* Attach callback to LSM6DSO INT1 */ + acc_gyro->attach_int1_irq(&int1_cb); + + /* Enable LSM6DSO accelerometer */ + acc_gyro->enable_x(); + /* Enable Tilt Detection. */ + acc_gyro->enable_tilt_detection(); + + printf("\r\n--- Starting new run ---\r\n"); + + while (1) { + if (toggle_tilt_enable) { + toggle_tilt_enable = 0; + if (tilt_is_enabled == 0) { + acc_gyro->enable_tilt_detection(); + tilt_is_enabled = 1; + } else { + acc_gyro->disable_tilt_detection(); + tilt_is_enabled = 0; + } + } + + if (mems_event) { + mems_event = 0; + LSM6DSO_Event_Status_t status; + acc_gyro->get_event_status(&status); + if (status.TiltStatus) { + /* Led blinking. */ + myled = 1; + wait(0.2); + myled = 0; + + /* Output data. */ + printf("Tilt Detected!\r\n"); + } + } } - - if (mems_event) { - mems_event = 0; - LSM6DSO_Event_Status_t status; - acc_gyro->get_event_status(&status); - if (status.TiltStatus) { - /* Led blinking. */ - myled = 1; - wait(0.2); - myled = 0; - - /* Output data. */ - printf("Tilt Detected!\r\n"); - } - } - } }