Example of single tap and double tap detection for LSM6DSL in X-NUCLEO-IKS01A2

Dependencies:   X_NUCLEO_IKS01A2 mbed

Fork of SingleDoubleTap_IKS01A2 by ST Expansion SW Team

Single and Double Tap Demo Application based on sensor expansion board X-NUCLEO-IKS01A2

Main function is to show how to detect the single and double tap events 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 tap the board and then view the notification using an hyper terminal. When the single tap is detected, the LED is switched on for a while.
- the user can press the user button to pass from the single tap detection to the double tap detection feature. The user can try to double tap the board and then view the notification using an hyper terminal. When the double tap is detected, the LED is switched on twice for a while.
- the user can press again the user button to disable the single and double tap detection feature.
- the user can press the user button to enable again the single tap detection feature and so on.

Committer:
cparata
Date:
Wed Nov 23 16:46:14 2016 +0000
Revision:
6:2380444e4c75
Parent:
2:21a191bd1998
Move interrupt settings inside component drivers

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cparata 2:21a191bd1998 1 /**
cparata 2:21a191bd1998 2 ******************************************************************************
cparata 2:21a191bd1998 3 * @file x_nucleo_iks01a2.cpp
cparata 2:21a191bd1998 4 * @author AST / EST
cparata 2:21a191bd1998 5 * @version V0.0.1
cparata 2:21a191bd1998 6 * @date 9-August-2016
cparata 2:21a191bd1998 7 * @brief Implementation file for the X_NUCLEO_IKS01A2 singleton class
cparata 2:21a191bd1998 8 ******************************************************************************
cparata 2:21a191bd1998 9 * @attention
cparata 2:21a191bd1998 10 *
cparata 2:21a191bd1998 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
cparata 2:21a191bd1998 12 *
cparata 2:21a191bd1998 13 * Redistribution and use in source and binary forms, with or without modification,
cparata 2:21a191bd1998 14 * are permitted provided that the following conditions are met:
cparata 2:21a191bd1998 15 * 1. Redistributions of source code must retain the above copyright notice,
cparata 2:21a191bd1998 16 * this list of conditions and the following disclaimer.
cparata 2:21a191bd1998 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
cparata 2:21a191bd1998 18 * this list of conditions and the following disclaimer in the documentation
cparata 2:21a191bd1998 19 * and/or other materials provided with the distribution.
cparata 2:21a191bd1998 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
cparata 2:21a191bd1998 21 * may be used to endorse or promote products derived from this software
cparata 2:21a191bd1998 22 * without specific prior written permission.
cparata 2:21a191bd1998 23 *
cparata 2:21a191bd1998 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
cparata 2:21a191bd1998 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
cparata 2:21a191bd1998 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
cparata 2:21a191bd1998 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
cparata 2:21a191bd1998 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
cparata 2:21a191bd1998 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
cparata 2:21a191bd1998 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
cparata 2:21a191bd1998 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
cparata 2:21a191bd1998 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
cparata 2:21a191bd1998 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cparata 2:21a191bd1998 34 *
cparata 2:21a191bd1998 35 ******************************************************************************
cparata 2:21a191bd1998 36 */
cparata 2:21a191bd1998 37
cparata 2:21a191bd1998 38 /* Includes ------------------------------------------------------------------*/
cparata 2:21a191bd1998 39 #include "mbed.h"
cparata 2:21a191bd1998 40 #include "x_nucleo_iks01a2.h"
cparata 2:21a191bd1998 41
cparata 2:21a191bd1998 42 /* Static variables ----------------------------------------------------------*/
cparata 2:21a191bd1998 43 X_NUCLEO_IKS01A2* X_NUCLEO_IKS01A2::_instance = NULL;
cparata 2:21a191bd1998 44
cparata 2:21a191bd1998 45
cparata 2:21a191bd1998 46 /* Methods -------------------------------------------------------------------*/
cparata 2:21a191bd1998 47 /**
cparata 2:21a191bd1998 48 * @brief Constructor
cparata 2:21a191bd1998 49 */
cparata 2:21a191bd1998 50 X_NUCLEO_IKS01A2::X_NUCLEO_IKS01A2(DevI2C *ext_i2c) : dev_i2c(ext_i2c),
cparata 2:21a191bd1998 51 ht_sensor(new HTS221Sensor(*dev_i2c)),
cparata 2:21a191bd1998 52 magnetometer(new LSM303AGR_MAG_Sensor(*dev_i2c)),
cparata 2:21a191bd1998 53 accelerometer(new LSM303AGR_ACC_Sensor(*dev_i2c)),
cparata 2:21a191bd1998 54 pt_sensor(new LPS22HBSensor(*dev_i2c)),
cparata 6:2380444e4c75 55 acc_gyro(new LSM6DSLSensor(*dev_i2c, IKS01A2_PIN_LSM6DSL_INT1, IKS01A2_PIN_LSM6DSL_INT2))
cparata 2:21a191bd1998 56 {
cparata 2:21a191bd1998 57 ht_sensor->Init(NULL);
cparata 2:21a191bd1998 58 magnetometer->Init(NULL);
cparata 2:21a191bd1998 59 accelerometer->Init(NULL);
cparata 2:21a191bd1998 60 pt_sensor->Init(NULL);
cparata 2:21a191bd1998 61 acc_gyro->Init(NULL);
cparata 2:21a191bd1998 62 }
cparata 2:21a191bd1998 63
cparata 2:21a191bd1998 64 /**
cparata 2:21a191bd1998 65 * @brief Get singleton instance
cparata 2:21a191bd1998 66 * @return a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A2.
cparata 2:21a191bd1998 67 * A return value of NULL indicates an out of memory situation.
cparata 2:21a191bd1998 68 * @param[in] ext_i2c (optional) pointer to an instance of DevI2C to be used
cparata 2:21a191bd1998 69 * for communication on the expansion board.
cparata 2:21a191bd1998 70 * Defaults to NULL.
cparata 2:21a191bd1998 71 * Taken into account only on the very first call of one of the 'Instance' functions.
cparata 2:21a191bd1998 72 * If not provided a new DevI2C will be created with standard
cparata 2:21a191bd1998 73 * configuration parameters.
cparata 2:21a191bd1998 74 * The used DevI2C object gets saved in instance variable dev_i2c.
cparata 2:21a191bd1998 75 */
cparata 2:21a191bd1998 76 X_NUCLEO_IKS01A2* X_NUCLEO_IKS01A2::Instance(DevI2C *ext_i2c) {
cparata 2:21a191bd1998 77 if(_instance == NULL) {
cparata 2:21a191bd1998 78 if(ext_i2c == NULL)
cparata 2:21a191bd1998 79 ext_i2c = new DevI2C(IKS01A2_PIN_I2C_SDA, IKS01A2_PIN_I2C_SCL);
cparata 2:21a191bd1998 80
cparata 2:21a191bd1998 81 if(ext_i2c != NULL)
cparata 2:21a191bd1998 82 _instance = new X_NUCLEO_IKS01A2(ext_i2c);
cparata 2:21a191bd1998 83 }
cparata 2:21a191bd1998 84
cparata 2:21a191bd1998 85 return _instance;
cparata 2:21a191bd1998 86 }
cparata 2:21a191bd1998 87
cparata 2:21a191bd1998 88 /**
cparata 2:21a191bd1998 89 * @brief Get singleton instance
cparata 2:21a191bd1998 90 * @return a pointer to the initialized singleton instance of class X_NUCLEO_IKS01A1.
cparata 2:21a191bd1998 91 * A return value of NULL indicates an out of memory situation.
cparata 2:21a191bd1998 92 * @param[in] sda I2C data line pin.
cparata 2:21a191bd1998 93 * Taken into account only on the very first call of one of the 'Instance' functions.
cparata 2:21a191bd1998 94 * A new DevI2C will be created based on parameters 'sda' and 'scl'.
cparata 2:21a191bd1998 95 * The used DevI2C object gets saved in instance variable dev_i2c.
cparata 2:21a191bd1998 96 * @param[in] scl I2C clock line pin.
cparata 2:21a191bd1998 97 * Taken into account only on the very first call of one of the 'Instance' functions.
cparata 2:21a191bd1998 98 * A new DevI2C will be created based on parameters 'sda' and 'scl'.
cparata 2:21a191bd1998 99 * The used DevI2C object gets saved in instance variable dev_i2c.
cparata 2:21a191bd1998 100 */
cparata 2:21a191bd1998 101 X_NUCLEO_IKS01A2* X_NUCLEO_IKS01A2::Instance(PinName sda, PinName scl) {
cparata 2:21a191bd1998 102 if(_instance == NULL) {
cparata 2:21a191bd1998 103 DevI2C *ext_i2c = new DevI2C(sda, scl);
cparata 2:21a191bd1998 104
cparata 2:21a191bd1998 105 if(ext_i2c != NULL)
cparata 2:21a191bd1998 106 _instance = new X_NUCLEO_IKS01A2(ext_i2c);
cparata 2:21a191bd1998 107 }
cparata 2:21a191bd1998 108
cparata 2:21a191bd1998 109 return _instance;
cparata 2:21a191bd1998 110 }