Firmware Library for X-NUCLEO-IKS01A3 (MEMS Inertial & Environmental Sensors) Expansion Board
Dependencies: STTS751 LPS22HH LIS2MDL HTS221 LIS2DW12 LSM6DSO
Dependents: ELEC35XR-2019 ELEC35XR-2019_SEM calculate IKS01A3 ... more
X-NUCLEO-IKS01A3 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-IKS01A3
MEMS Inertial & Environmental Sensors Nucleo Expansion Board.
Firmware Library
Class X_NUCLEO_IKS01A3 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 LIS2MDL 3-Axis Magnetometer
- a LIS2DW12 3-Axis Accelerometer
- a LPS22HH MEMS Pressure and Temperature Sensor
- a LSM6DSO 3-Axis Accelerometer and 3-Axis Gyroscope
- a STTS751 MEMS Temperature Sensor
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_IKS01A3 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 XNucleoIKS01A3 *mems_expansion_board = XNucleoIKS01A3::instance(D14, D15, D4, D5, A3, D6, A4);
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 with LIS2DW12
- 6D Orientation Recognition with LSM6DSO
- Free Fall Event with LSM6DSO
- Pedometer with LSM6DSO
- Single and Double Tap Events with LSM6DSO
- Temperature Limit with STTS751
- Tilt Event with LSM6DSO
- Wake Up Event with LIS2DW12
- Wake Up Event with LSM6DSO
XNucleoIKS01A3.cpp@14:aea924ef2645, 2020-10-29 (annotated)
- Committer:
- cparata
- Date:
- Thu Oct 29 14:01:33 2020 +0000
- Revision:
- 14:aea924ef2645
- Parent:
- 5:463962d6f485
Update LSM6DSO library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cparata | 0:cbbff52ff25a | 1 | /** |
cparata | 0:cbbff52ff25a | 2 | ****************************************************************************** |
cparata | 0:cbbff52ff25a | 3 | * @file XNucleoIKS01A3.cpp |
cparata | 0:cbbff52ff25a | 4 | * @author SRA |
cparata | 0:cbbff52ff25a | 5 | * @version V1.0.0 |
cparata | 0:cbbff52ff25a | 6 | * @date 5-March-2019 |
cparata | 0:cbbff52ff25a | 7 | * @brief Implementation file for the X_NUCLEO_IKS01A3 singleton class |
cparata | 0:cbbff52ff25a | 8 | ****************************************************************************** |
cparata | 0:cbbff52ff25a | 9 | * @attention |
cparata | 0:cbbff52ff25a | 10 | * |
cparata | 0:cbbff52ff25a | 11 | * <h2><center>© COPYRIGHT(c) 2019 STMicroelectronics</center></h2> |
cparata | 0:cbbff52ff25a | 12 | * |
cparata | 0:cbbff52ff25a | 13 | * Redistribution and use in source and binary forms, with or without modification, |
cparata | 0:cbbff52ff25a | 14 | * are permitted provided that the following conditions are met: |
cparata | 0:cbbff52ff25a | 15 | * 1. Redistributions of source code must retain the above copyright notice, |
cparata | 0:cbbff52ff25a | 16 | * this list of conditions and the following disclaimer. |
cparata | 0:cbbff52ff25a | 17 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
cparata | 0:cbbff52ff25a | 18 | * this list of conditions and the following disclaimer in the documentation |
cparata | 0:cbbff52ff25a | 19 | * and/or other materials provided with the distribution. |
cparata | 0:cbbff52ff25a | 20 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
cparata | 0:cbbff52ff25a | 21 | * may be used to endorse or promote products derived from this software |
cparata | 0:cbbff52ff25a | 22 | * without specific prior written permission. |
cparata | 0:cbbff52ff25a | 23 | * |
cparata | 0:cbbff52ff25a | 24 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
cparata | 0:cbbff52ff25a | 25 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
cparata | 0:cbbff52ff25a | 26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
cparata | 0:cbbff52ff25a | 27 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
cparata | 0:cbbff52ff25a | 28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
cparata | 0:cbbff52ff25a | 29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
cparata | 0:cbbff52ff25a | 30 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
cparata | 0:cbbff52ff25a | 31 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
cparata | 0:cbbff52ff25a | 32 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
cparata | 0:cbbff52ff25a | 33 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
cparata | 0:cbbff52ff25a | 34 | * |
cparata | 0:cbbff52ff25a | 35 | ****************************************************************************** |
cparata | 5:463962d6f485 | 36 | */ |
cparata | 5:463962d6f485 | 37 | |
cparata | 0:cbbff52ff25a | 38 | /* Includes ------------------------------------------------------------------*/ |
cparata | 0:cbbff52ff25a | 39 | #include "mbed.h" |
cparata | 0:cbbff52ff25a | 40 | #include "XNucleoIKS01A3.h" |
cparata | 0:cbbff52ff25a | 41 | |
cparata | 0:cbbff52ff25a | 42 | /* Static variables ----------------------------------------------------------*/ |
cparata | 0:cbbff52ff25a | 43 | XNucleoIKS01A3 *XNucleoIKS01A3::_instance = NULL; |
cparata | 0:cbbff52ff25a | 44 | |
cparata | 0:cbbff52ff25a | 45 | |
cparata | 0:cbbff52ff25a | 46 | /* Methods -------------------------------------------------------------------*/ |
cparata | 0:cbbff52ff25a | 47 | /** |
cparata | 0:cbbff52ff25a | 48 | * @brief Constructor |
cparata | 0:cbbff52ff25a | 49 | */ |
cparata | 0:cbbff52ff25a | 50 | XNucleoIKS01A3::XNucleoIKS01A3(DevI2C *ext_i2c, PinName lsm6dso_int1, PinName lsm6dso_int2, PinName lis2dw12_int1, PinName lps22hh_int, PinName stts751_int) : dev_i2c(ext_i2c), |
cparata | 0:cbbff52ff25a | 51 | ht_sensor(new HTS221Sensor(dev_i2c)), |
cparata | 0:cbbff52ff25a | 52 | magnetometer(new LIS2MDLSensor(dev_i2c)), |
cparata | 0:cbbff52ff25a | 53 | accelerometer(new LIS2DW12Sensor(dev_i2c, LIS2DW12_I2C_ADD_H, lis2dw12_int1)), |
cparata | 0:cbbff52ff25a | 54 | pt_sensor(new LPS22HHSensor(dev_i2c, LPS22HH_I2C_ADD_H, lps22hh_int)), |
cparata | 0:cbbff52ff25a | 55 | acc_gyro(new LSM6DSOSensor(dev_i2c, LSM6DSO_I2C_ADD_H, lsm6dso_int1, lsm6dso_int2)), |
cparata | 3:90c874c6a9f6 | 56 | t_sensor(new STTS751Sensor(dev_i2c, STTS751_1xxxx_ADD_7K5, stts751_int)) |
cparata | 5:463962d6f485 | 57 | { |
cparata | 5:463962d6f485 | 58 | ht_sensor->init(NULL); |
cparata | 5:463962d6f485 | 59 | magnetometer->init(NULL); |
cparata | 5:463962d6f485 | 60 | accelerometer->init(NULL); |
cparata | 5:463962d6f485 | 61 | pt_sensor->init(NULL); |
cparata | 5:463962d6f485 | 62 | acc_gyro->init(NULL); |
cparata | 5:463962d6f485 | 63 | t_sensor->init(NULL); |
cparata | 0:cbbff52ff25a | 64 | } |
cparata | 0:cbbff52ff25a | 65 | |
cparata | 0:cbbff52ff25a | 66 | /** |
cparata | 0:cbbff52ff25a | 67 | * @brief Get singleton instance |
cparata | 0:cbbff52ff25a | 68 | * @return a pointer to the initialized singleton instance of class XNucleoIKS01A3. |
cparata | 0:cbbff52ff25a | 69 | * A return value of NULL indicates an out of memory situation. |
cparata | 0:cbbff52ff25a | 70 | * @param[in] ext_i2c (optional) pointer to an instance of DevI2C to be used |
cparata | 5:463962d6f485 | 71 | * for communication on the expansion board. |
cparata | 0:cbbff52ff25a | 72 | * Defaults to NULL. |
cparata | 0:cbbff52ff25a | 73 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 74 | * If not provided a new DevI2C will be created with standard |
cparata | 0:cbbff52ff25a | 75 | * configuration parameters. |
cparata | 0:cbbff52ff25a | 76 | * The used DevI2C object gets saved in instance variable dev_i2c. |
cparata | 0:cbbff52ff25a | 77 | * @param[in] lsm6dso_int1 LSM6DSO INT1 pin. |
cparata | 0:cbbff52ff25a | 78 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 79 | * It maps the INT1 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT1. |
cparata | 0:cbbff52ff25a | 80 | * @param[in] lsm6dso_int2 LSM6DSO INT2 pin. |
cparata | 0:cbbff52ff25a | 81 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 82 | * It maps the INT2 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT2. |
cparata | 0:cbbff52ff25a | 83 | * @param[in] lis2dw12_int1 LIS2DW12 INT1 pin. |
cparata | 0:cbbff52ff25a | 84 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 85 | * It maps the INT1 pin for LIS2DW12. Defaults to IKS01A3_PIN_LIS2DW12_INT1. |
cparata | 0:cbbff52ff25a | 86 | * @param[in] lps22hh_int LPS22HH INT pin. |
cparata | 0:cbbff52ff25a | 87 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 88 | * It maps the INT pin for LPS22HH. Defaults to IKS01A3_PIN_LPS22HH_INT. |
cparata | 0:cbbff52ff25a | 89 | * @param[in] stts751_int STTS751 INT pin. |
cparata | 0:cbbff52ff25a | 90 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 91 | * It maps the INT pin for STTS751. Defaults to IKS01A3_PIN_STTS751_INT. |
cparata | 0:cbbff52ff25a | 92 | */ |
cparata | 5:463962d6f485 | 93 | XNucleoIKS01A3 *XNucleoIKS01A3::instance(DevI2C *ext_i2c, PinName lsm6dso_int1, PinName lsm6dso_int2, PinName lis2dw12_int1, PinName lps22hh_int, PinName stts751_int) |
cparata | 5:463962d6f485 | 94 | { |
cparata | 5:463962d6f485 | 95 | if (_instance == NULL) { |
cparata | 5:463962d6f485 | 96 | if (ext_i2c == NULL) { |
cparata | 0:cbbff52ff25a | 97 | ext_i2c = new DevI2C(IKS01A3_PIN_I2C_SDA, IKS01A3_PIN_I2C_SCL); |
cparata | 5:463962d6f485 | 98 | } |
cparata | 0:cbbff52ff25a | 99 | |
cparata | 5:463962d6f485 | 100 | if (ext_i2c != NULL) { |
cparata | 0:cbbff52ff25a | 101 | _instance = new XNucleoIKS01A3(ext_i2c, lsm6dso_int1, lsm6dso_int2, lis2dw12_int1, lps22hh_int, stts751_int); |
cparata | 5:463962d6f485 | 102 | } |
cparata | 0:cbbff52ff25a | 103 | } |
cparata | 0:cbbff52ff25a | 104 | |
cparata | 0:cbbff52ff25a | 105 | return _instance; |
cparata | 0:cbbff52ff25a | 106 | } |
cparata | 0:cbbff52ff25a | 107 | |
cparata | 0:cbbff52ff25a | 108 | /** |
cparata | 0:cbbff52ff25a | 109 | * @brief Get singleton instance |
cparata | 0:cbbff52ff25a | 110 | * @return a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A3. |
cparata | 0:cbbff52ff25a | 111 | * A return value of NULL indicates an out of memory situation. |
cparata | 0:cbbff52ff25a | 112 | * @param[in] sda I2C data line pin. |
cparata | 0:cbbff52ff25a | 113 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 114 | * A new DevI2C will be created based on parameters 'sda' and 'scl'. |
cparata | 0:cbbff52ff25a | 115 | * The used DevI2C object gets saved in instance variable dev_i2c. |
cparata | 0:cbbff52ff25a | 116 | * @param[in] scl I2C clock line pin. |
cparata | 0:cbbff52ff25a | 117 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 118 | * A new DevI2C will be created based on parameters 'sda' and 'scl'. |
cparata | 0:cbbff52ff25a | 119 | * The used DevI2C object gets saved in instance variable dev_i2c. |
cparata | 0:cbbff52ff25a | 120 | * @param[in] lsm6dso_int1 LSM6DSO INT1 pin. |
cparata | 0:cbbff52ff25a | 121 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 122 | * It maps the INT1 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT1. |
cparata | 0:cbbff52ff25a | 123 | * @param[in] lsm6dso_int2 LSM6DSO INT2 pin. |
cparata | 0:cbbff52ff25a | 124 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 125 | * It maps the INT2 pin for LSM6DSO. Defaults to IKS01A3_PIN_LSM6DSO_INT2. |
cparata | 0:cbbff52ff25a | 126 | * @param[in] lis2dw12_int1 LIS2DW12 INT1 pin. |
cparata | 0:cbbff52ff25a | 127 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 128 | * It maps the INT1 pin for LIS2DW12. Defaults to IKS01A3_PIN_LIS2DW12_INT1. |
cparata | 0:cbbff52ff25a | 129 | * @param[in] lps22hh_int LPS22HH INT pin. |
cparata | 0:cbbff52ff25a | 130 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 131 | * It maps the INT pin for LPS22HH. Defaults to IKS01A3_PIN_LPS22HH_INT. |
cparata | 0:cbbff52ff25a | 132 | * @param[in] stts751_int STTS751 INT pin. |
cparata | 0:cbbff52ff25a | 133 | * Taken into account only on the very first call of one of the 'Instance' functions. |
cparata | 0:cbbff52ff25a | 134 | * It maps the INT pin for STTS751. Defaults to IKS01A3_PIN_STTS751_INT. |
cparata | 0:cbbff52ff25a | 135 | */ |
cparata | 5:463962d6f485 | 136 | XNucleoIKS01A3 *XNucleoIKS01A3::instance(PinName sda, PinName scl, PinName lsm6dso_int1, PinName lsm6dso_int2, PinName lis2dw12_int1, PinName lps22hh_int, PinName stts751_int) |
cparata | 5:463962d6f485 | 137 | { |
cparata | 5:463962d6f485 | 138 | if (_instance == NULL) { |
cparata | 0:cbbff52ff25a | 139 | DevI2C *ext_i2c = new DevI2C(sda, scl); |
cparata | 0:cbbff52ff25a | 140 | |
cparata | 5:463962d6f485 | 141 | if (ext_i2c != NULL) { |
cparata | 0:cbbff52ff25a | 142 | _instance = new XNucleoIKS01A3(ext_i2c, lsm6dso_int1, lsm6dso_int2, lis2dw12_int1, lps22hh_int, stts751_int); |
cparata | 5:463962d6f485 | 143 | } |
cparata | 0:cbbff52ff25a | 144 | } |
cparata | 0:cbbff52ff25a | 145 | |
cparata | 0:cbbff52ff25a | 146 | return _instance; |
cparata | 0:cbbff52ff25a | 147 | } |