![](/media/cache/group/ST_logo_2020_blue_V_cmyk.jpg.50x50_q85.jpg)
Example of pedometer for LSM6DSO in X-NUCLEO-IKS01A3
Dependencies: X_NUCLEO_IKS01A3
Pedometer Demo Application with LSM6DSO based on sensor expansion board X-NUCLEO-IKS01A3
Main function is to show how to count steps 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 to simulate the steps and then view the notification using an hyper terminal. When a new step is detected, the LED is switched on for a while.
- the user button can be used to reset the step counter.
Diff: main.cpp
- Revision:
- 5:6f7bb1c63cac
- Parent:
- 0:b7de156e1e7f
- Child:
- 6:6ea84663ee99
--- a/main.cpp Mon Jun 03 09:55:20 2019 +0000 +++ b/main.cpp Wed Jul 24 14:45:22 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,81 +34,84 @@ * 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 step_count_reset_request = 0; uint32_t previous_tick = 0; uint32_t current_tick = 0; uint16_t step_count = 0; - + /* User button callback. */ -void pressed_cb() { - step_count_reset_request = 1; +void pressed_cb() +{ + step_count_reset_request = 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 Pedometer. */ - acc_gyro->enable_pedometer(); - - previous_tick = clock(); - - printf("\r\n--- Starting new run ---\r\n"); - - while(1) { - if (mems_event) { - mems_event = 0; - LSM6DSO_Event_Status_t status; - acc_gyro->get_event_status(&status); - if (status.StepStatus) { - /* New step detected, so print the step counter */ - acc_gyro->get_step_counter(&step_count); - printf("Step counter: %d\r\n", step_count); - - /* Led blinking. */ - myled = 1; - wait(0.1); - myled = 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 Pedometer. */ + acc_gyro->enable_pedometer(); + + previous_tick = clock(); + + printf("\r\n--- Starting new run ---\r\n"); + + while (1) { + if (mems_event) { + mems_event = 0; + LSM6DSO_Event_Status_t status; + acc_gyro->get_event_status(&status); + if (status.StepStatus) { + /* New step detected, so print the step counter */ + acc_gyro->get_step_counter(&step_count); + printf("Step counter: %d\r\n", step_count); + + /* Led blinking. */ + myled = 1; + wait(0.1); + myled = 0; + } + } + + if (step_count_reset_request) { + step_count_reset_request = 0; + acc_gyro->reset_step_counter(); + } + + /* Print the step counter in any case every 3s */ + current_tick = clock(); + if (((current_tick - previous_tick) / CLOCKS_PER_SEC) >= 3) { + acc_gyro->get_step_counter(&step_count); + printf("Step counter: %d\r\n", step_count); + previous_tick = clock(); + } } - - if(step_count_reset_request) { - step_count_reset_request = 0; - acc_gyro->reset_step_counter(); - } - - /* Print the step counter in any case every 3s */ - current_tick = clock(); - if(((current_tick - previous_tick)/CLOCKS_PER_SEC) >= 3) { - acc_gyro->get_step_counter(&step_count); - printf("Step counter: %d\r\n", step_count); - previous_tick = clock(); - } - } }