Firmware Library for X-NUCLEO-IKS01A2 (MEMS Inertial & Environmental Sensors) Expansion Board
Dependencies: LPS22HB LSM6DSL LSM303AGR HTS221
Dependents: Giroscopio_main HelloWorld_IKS01A2 DuckieTownCar HelloWorld_IKS01A2 ... more
Fork of X_NUCLEO_IKS01A2 by
X-NUCLEO-IKS01A2 MEMS Inertial & Environmental Sensor Nucleo Expansion Board Firmware Package
Introduction
This firmware package includes Components Device Drivers and Board Support Package for STMicroelectronics' X-NUCLEO-IKS01A2
MEMS Inertial & Environmental Sensors Nucleo Expansion Board.
Firmware Library
Class X_NUCLEO_IKS01A2 is intended to represent the MEMS inertial & environmental sensors expansion board with the same name.
The expansion board is basically featuring four IPs:
- a HTS221 Relative Humidity and Temperature Sensor,
- a LSM303AGR 3-Axis Magnetometer and 3-Axis Accelerometer
- a LPS22HB MEMS Pressure and Temperature Sensor
- a LSM6DSL 3-Axis Accelerometer and 3-Axis Gyroscope
The expansion board features also a DIL 24-pin socket which makes it possible to add further MEMS adapters and other sensors (e.g. UV index).
It is intentionally implemented as a singleton because only one X_NUCLEO_IKS01A2 at a time might be deployed in a HW component stack. In order to get the singleton instance you have to call class method `instance()`, e.g.:
// Sensors expansion board singleton instance static X_NUCLEO_IKS01A2 *mems_expansion_board = X_NUCLEO_IKS01A2::instance(D14, D15, D4, D5);
Furthermore, library ST_INTERFACES
contains all abstract classes which together constitute the common API to which all existing and future ST components will adhere to.
Example Applications
- Hello World
- 6D Orientation Recognition
- Free Fall Event
- Multi Event
- Pedometer
- Single and Double Tap Events
- Tilt Event
- Wake Up Event
Revision 1:bd2a01e81e6f, committed 2016-11-28
- Comitter:
- cparata
- Date:
- Mon Nov 28 14:56:18 2016 +0000
- Parent:
- 0:cad5dab2b21d
- Child:
- 2:49e6947ee5a7
- Commit message:
- Add pin of interrupts in the main
Changed in this revision
--- a/Components/HTS221Sensor/HTS221Sensor.cpp Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/HTS221Sensor/HTS221Sensor.cpp Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file HTS221Sensor.cpp - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Implementation of an HTS221 Humidity and Temperature sensor.
--- a/Components/HTS221Sensor/HTS221Sensor.h Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/HTS221Sensor/HTS221Sensor.h Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file HTS221Sensor.h - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Abstract class of an HTS221 Humidity and Temperature sensor.
--- a/Components/LPS22HBSensor/LPS22HBSensor.cpp Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LPS22HBSensor/LPS22HBSensor.cpp Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LPS22HBSensor.cpp - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Implementation of an LPS22HB Pressure sensor.
--- a/Components/LPS22HBSensor/LPS22HBSensor.h Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LPS22HBSensor/LPS22HBSensor.h Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LPS22HBSensor.h - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Abstract Class of an LPS22HB Pressure sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.cpp Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.cpp Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LSM303AGR_ACC_Sensor.cpp - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Implementation an LSM303AGR accelerometer sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.h Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LSM303AGRSensor/LSM303AGR_ACC_Sensor.h Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LSM303AGR_ACC_Sensor.h - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Abstract Class of an LSM303AGR accelerometer sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.cpp Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.cpp Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LSM303AGR_MAG_Sensor.cpp - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Implementation an LSM303AGR magnetometer sensor.
--- a/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.h Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LSM303AGRSensor/LSM303AGR_MAG_Sensor.h Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LSM303AGR_MAG_Sensor.h - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Abstract Class of an LSM303AGR magnetometer sensor.
--- a/Components/LSM6DSLSensor/LSM6DSLSensor.cpp Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LSM6DSLSensor/LSM6DSLSensor.cpp Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LSM6DSLSensor.cpp - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Implementation of an LSM6DSL Inertial Measurement Unit (IMU) 6 axes
--- a/Components/LSM6DSLSensor/LSM6DSLSensor.h Mon Nov 28 13:16:22 2016 +0000 +++ b/Components/LSM6DSLSensor/LSM6DSLSensor.h Mon Nov 28 14:56:18 2016 +0000 @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file LSM6DSLSensor.h - * @author AST + * @author CLab * @version V1.0.0 * @date 5 August 2016 * @brief Abstract Class of an LSM6DSL Inertial Measurement Unit (IMU) 6 axes
--- a/x_nucleo_iks01a2.cpp Mon Nov 28 13:16:22 2016 +0000 +++ b/x_nucleo_iks01a2.cpp Mon Nov 28 14:56:18 2016 +0000 @@ -1,8 +1,8 @@ /** ****************************************************************************** * @file x_nucleo_iks01a2.cpp - * @author AST / EST - * @version V0.0.1 + * @author CLab + * @version V1.0.0 * @date 9-August-2016 * @brief Implementation file for the X_NUCLEO_IKS01A2 singleton class ****************************************************************************** @@ -62,6 +62,23 @@ } /** + * @brief Constructor + */ +X_NUCLEO_IKS01A2::X_NUCLEO_IKS01A2(DevI2C *ext_i2c, PinName int1, PinName int2) : dev_i2c(ext_i2c), + ht_sensor(new HTS221Sensor(*dev_i2c)), + magnetometer(new LSM303AGR_MAG_Sensor(*dev_i2c)), + accelerometer(new LSM303AGR_ACC_Sensor(*dev_i2c)), + pt_sensor(new LPS22HBSensor(*dev_i2c)), + acc_gyro(new LSM6DSLSensor(*dev_i2c, int1, int2)) +{ + ht_sensor->Init(NULL); + magnetometer->Init(NULL); + accelerometer->Init(NULL); + pt_sensor->Init(NULL); + acc_gyro->Init(NULL); +} + +/** * @brief Get singleton instance * @return a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A2. * A return value of NULL indicates an out of memory situation. @@ -108,3 +125,33 @@ return _instance; } + +/** + * @brief Get singleton instance + * @return a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A1. + * A return value of NULL indicates an out of memory situation. + * @param[in] sda I2C data line pin. + * Taken into account only on the very first call of one of the 'Instance' functions. + * A new DevI2C will be created based on parameters 'sda' and 'scl'. + * The used DevI2C object gets saved in instance variable dev_i2c. + * @param[in] scl I2C clock line pin. + * Taken into account only on the very first call of one of the 'Instance' functions. + * A new DevI2C will be created based on parameters 'sda' and 'scl'. + * The used DevI2C object gets saved in instance variable dev_i2c. + * @param[in] int1 LSM6DSL INT1 pin. + * Taken into account only on the very first call of one of the 'Instance' functions. + * It maps the INT1 pin for LSM6DSL. + * @param[in] int2 LSM6DSL INT1 pin. + * Taken into account only on the very first call of one of the 'Instance' functions. + * It maps the INT2 pin for LSM6DSL. + */ +X_NUCLEO_IKS01A2* X_NUCLEO_IKS01A2::Instance(PinName sda, PinName scl, PinName int1, PinName int2) { + if(_instance == NULL) { + DevI2C *ext_i2c = new DevI2C(sda, scl); + + if(ext_i2c != NULL) + _instance = new X_NUCLEO_IKS01A2(ext_i2c, int1, int2); + } + + return _instance; +}
--- a/x_nucleo_iks01a2.h Mon Nov 28 13:16:22 2016 +0000 +++ b/x_nucleo_iks01a2.h Mon Nov 28 14:56:18 2016 +0000 @@ -1,8 +1,8 @@ /** ****************************************************************************** * @file x_nucleo_iks01a2.h - * @author AST / EST - * @version V0.0.1 + * @author CLab + * @version V1.0.0 * @date 9-August-2016 * @brief Header file for class X_NUCLEO_IKS01A2 representing a X-NUCLEO-IKS01A2 * expansion board @@ -82,6 +82,7 @@ { protected: X_NUCLEO_IKS01A2(DevI2C *ext_i2c); + X_NUCLEO_IKS01A2(DevI2C *ext_i2c, PinName int1, PinName int2); ~X_NUCLEO_IKS01A2(void) { /* should never be called */ @@ -91,6 +92,7 @@ public: static X_NUCLEO_IKS01A2* Instance(DevI2C *ext_i2c = NULL); static X_NUCLEO_IKS01A2* Instance(PinName sda, PinName scl); + static X_NUCLEO_IKS01A2* Instance(PinName sda, PinName scl, PinName int1, PinName int2); DevI2C *dev_i2c;
--- a/x_nucleo_iks01a2_targets.h Mon Nov 28 13:16:22 2016 +0000 +++ b/x_nucleo_iks01a2_targets.h Mon Nov 28 14:56:18 2016 +0000 @@ -1,8 +1,8 @@ /** ****************************************************************************** * @file x_nucleo_iks01a2_targets.h - * @author AST / EST - * @version V0.0.1 + * @author CLab + * @version V1.0.0 * @date 9-August-2016 * @brief This header file is intended to manage the differences between * the different supported base-boards which might mount the