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.

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();
-    }
-  }
 }