"Sensors Reader" Sample Application for X-NUCLEO-IKS01A1 Expansion Board

Dependencies:   X_NUCLEO_IKS01A1 mbed

Fork of Sensors_Reader by ST Expansion SW Team

X-NUCLEO-IKS01A1 MEMS Inertial & Environmental Sensor Nucleo Expansion Board Firmware Package

Introduction

This firmware package includes Components Device Drivers, Board Support Package and example applications for STMicroelectronics X-NUCLEO-IKS01A1 MEMS Inertial & Environmental Nucleo Expansion Board.

Example Application

First of all, the example application outputs information retrieved from the Expansion Board over UART. Launch a terminal application (e.g.: PuTTY on Windows, Minicom on Linux) and set the UART port to 9600 bps, 8 bit, No Parity, 1 stop bit.

The "Sensors Reader" program is a more complex example of how to use the X-NUCLEO-IKS01A1 expansion board featuring among others:

  • Support for LSM6DS3 3D Accelerometer & Gyroscope (on DIL 24-pin socket) including free-fall detection
  • Usage of LED & Ticker
  • Exploitation of wait for event
  • (Top-/Bottom-Half) Interrupt handling
Revision:
3:c35414b03a65
Parent:
2:00f62b148a07
Child:
4:81037ace7f27
diff -r 00f62b148a07 -r c35414b03a65 main.cpp
--- a/main.cpp	Thu Apr 16 10:38:54 2015 +0200
+++ b/main.cpp	Mon Apr 20 11:42:38 2015 +0200
@@ -66,12 +66,6 @@
 /*** Macros ------------------------------------------------------------------- ***/
 #define APP_LOOP_PERIOD 1300 // in ms
 
-#if defined(TARGET_K64F)
-#define USER_BUTTON (SW2)
-#elif defined(TARGET_LPC11U68)
-#define USER_BUTTON (P0_16)
-#endif // !TARGET_MCU_K64F
-
 
 /*** Typedefs ----------------------------------------------------------------- ***/
 typedef struct {
@@ -89,13 +83,8 @@
 #endif // DBG_MCU
 
 static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance();
-
 static Ticker ticker;
-static InterruptIn button(USER_BUTTON);
-
 static volatile bool timer_irq_triggered = false;
-static volatile bool button_irq_triggered = false;
-
 static DigitalOut myled(LED1);
 
 /*** Helper Functions (1/2) ------------------------------------------------------------ ***/
@@ -107,23 +96,8 @@
 	timer_irq_triggered = true;
 }
 
-/* Called in interrupt context, therefore just set a trigger variable */
-static void button_irq(void) {
-	button_irq_triggered = true;
-	button.disable_irq();
-}
-
 
 /*** Interrupt Handler Bottom-Halves ------------------------------------------------- ***/
-/* Handle button irq
-   (here we are in "normal" context, i.e. not in IRQ context)
-*/
-static void handle_button_irq(void) {
-	/* TODO */
-
-	/* Re-enable button irq */
-	button.enable_irq();
-}
 
 
 /*** Helper Functions (2/2) ------------------------------------------------------------ ***/
@@ -145,10 +119,6 @@
 static void init(void) {
 	uint8_t hts221_id;
 
-	/* Set mode & irq handler for button */
-	button.mode(PullNone);
-	button.fall(button_irq);
-
 	/* Determine ID of Humidity & Tempreture Sensor */
 	mems_expansion_board->ht_sensor.ReadID(&hts221_id);
     	printf("HTS221_ID = 0x%x (%u)\n", hts221_id, hts221_id);
@@ -214,10 +184,6 @@
 			timer_irq_triggered = false;
 			__enable_irq();
 			main_cycle();
-		} else if(button_irq_triggered) {
-			button_irq_triggered = false;
-			__enable_irq();
-			handle_button_irq();
 		} else {
 			__WFI();
 			__enable_irq(); /* do NOT enable irqs before WFI to avoid