Library to interface H3LIS331DL accelerometer.

Dependents:   H3LIS331DL_Demo H3LIS331DL_AdjVal

3-axis Digital Accelerometer H3LIS331DL library

This library interfaces this grove sensor and was tested so far in a LPC1768, but it should work with all mbed platforms supporting I2C API.

The main difference from the original library is that the constructor takes two pins for SDA and SCL.

Basic example

#include "mbed.h"
#include "H3LIS331DL.h"

H3LIS331DL h3lis(p28, p27);
Serial pc(USBTX, USBRX); // tx, rx
C12832 lcd(p5, p7, p6, p8, p11);

int main() {
    h3lis.init();

    while(1) {
        double accel[3] = {0.0, 0.0, 0.0};
        
        h3lis.getAcceleration(accel);
        pc.printf("X %1.3f    Y %1.3f    Z %1.3f\n", accel[0], accel[1], accel[2]);
        wait_ms(100);
    }
}

Example applications

Find the two applications from Seeed Studio ported into mbed:

License

The MIT License (MIT)

Copyright (c) 2013 Seeed Technology Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

/media/uploads/spastor/grove_3axis_accelerometer400g.jpg

Committer:
spastor
Date:
Mon Dec 08 22:11:00 2014 +0000
Revision:
0:2b446bf9b93b
Ported from Seeed Studio's library for arduino https://github.com/Seeed-Studio/Accelerometer_H3LIS331DL Commit a39c47a656e5b6893ae0714e1bfdc769fab318b2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spastor 0:2b446bf9b93b 1 /*
spastor 0:2b446bf9b93b 2 * H3LIS331DL.h
spastor 0:2b446bf9b93b 3 * A library for 3-Axis Digital Accelerometer(±400g)
spastor 0:2b446bf9b93b 4 *
spastor 0:2b446bf9b93b 5 * Copyright (c) 2014 seeed technology inc.
spastor 0:2b446bf9b93b 6 * Website : www.seeed.cc
spastor 0:2b446bf9b93b 7 * Author : lawliet zou
spastor 0:2b446bf9b93b 8 * Create Time: April 2014
spastor 0:2b446bf9b93b 9 * Change Log :
spastor 0:2b446bf9b93b 10 *
spastor 0:2b446bf9b93b 11 * The MIT License (MIT)
spastor 0:2b446bf9b93b 12 *
spastor 0:2b446bf9b93b 13 * Permission is hereby granted, free of charge, to any person obtaining a copy
spastor 0:2b446bf9b93b 14 * of this software and associated documentation files (the "Software"), to deal
spastor 0:2b446bf9b93b 15 * in the Software without restriction, including without limitation the rights
spastor 0:2b446bf9b93b 16 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
spastor 0:2b446bf9b93b 17 * copies of the Software, and to permit persons to whom the Software is
spastor 0:2b446bf9b93b 18 * furnished to do so, subject to the following conditions:
spastor 0:2b446bf9b93b 19 *
spastor 0:2b446bf9b93b 20 * The above copyright notice and this permission notice shall be included in
spastor 0:2b446bf9b93b 21 * all copies or substantial portions of the Software.
spastor 0:2b446bf9b93b 22 *
spastor 0:2b446bf9b93b 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
spastor 0:2b446bf9b93b 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
spastor 0:2b446bf9b93b 25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
spastor 0:2b446bf9b93b 26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
spastor 0:2b446bf9b93b 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
spastor 0:2b446bf9b93b 28 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
spastor 0:2b446bf9b93b 29 * THE SOFTWARE.
spastor 0:2b446bf9b93b 30 */
spastor 0:2b446bf9b93b 31
spastor 0:2b446bf9b93b 32 #include "mbed.h"
spastor 0:2b446bf9b93b 33
spastor 0:2b446bf9b93b 34 #ifndef H3LIS331DL_H
spastor 0:2b446bf9b93b 35 #define H3LIS331DL_H
spastor 0:2b446bf9b93b 36
spastor 0:2b446bf9b93b 37 #define MEMS_SET 0x01
spastor 0:2b446bf9b93b 38 #define MEMS_RESET 0x00
spastor 0:2b446bf9b93b 39
spastor 0:2b446bf9b93b 40 #define H3LIS331DL_MEMS_I2C_ADDRESS 0x18//0x32
spastor 0:2b446bf9b93b 41
spastor 0:2b446bf9b93b 42 //Register and define
spastor 0:2b446bf9b93b 43 #define H3LIS331DL_WHO_AM_I 0x0F // device identification register
spastor 0:2b446bf9b93b 44
spastor 0:2b446bf9b93b 45 // CONTROL REGISTER 1
spastor 0:2b446bf9b93b 46 #define H3LIS331DL_CTRL_REG1 0x20
spastor 0:2b446bf9b93b 47 #define H3LIS331DL_PM BIT(5) //PowerMode selection: 000 - power down / 001 - normal mode / other - low power
spastor 0:2b446bf9b93b 48 #define H3LIS331DL_DR BIT(3) //output data rate: 00 - 50hz / 01 - 100hz / 10 - 400hz / 11 - 1000hz
spastor 0:2b446bf9b93b 49 #define H3LIS331DL_ZEN BIT(2) //Z-axis enable: 0 - disable / 1 - enable
spastor 0:2b446bf9b93b 50 #define H3LIS331DL_YEN BIT(1) //Y-axis enable: 0 - disable / 1 - enable
spastor 0:2b446bf9b93b 51 #define H3LIS331DL_XEN BIT(0) //Y-axis enable: 0 - disable / 1 - enable
spastor 0:2b446bf9b93b 52
spastor 0:2b446bf9b93b 53 //CONTROL REGISTER 2
spastor 0:2b446bf9b93b 54 #define H3LIS331DL_CTRL_REG2 0x21
spastor 0:2b446bf9b93b 55 #define H3LIS331DL_BOOT BIT(7) //reboot memory content, default is 0
spastor 0:2b446bf9b93b 56 #define H3LIS331DL_HPM BIT(5) //High-pass-filter mode selection, default is 00
spastor 0:2b446bf9b93b 57 #define H3LIS331DL_FDS BIT(4) //Filter data selection, default is 0
spastor 0:2b446bf9b93b 58 #define H3LIS331DL_HPEN2 BIT(3) //High-pass filter enabled for interrupt 2 source, default is 0
spastor 0:2b446bf9b93b 59 #define H3LIS331DL_HPEN1 BIT(2) //High-pass filter enabled for interrupt 1 source, default is 0
spastor 0:2b446bf9b93b 60 #define H3LIS331DL_HPCF BIT(0) //High-pass filter cutoff frequency configuration, default is 00
spastor 0:2b446bf9b93b 61
spastor 0:2b446bf9b93b 62 //CONTROL REGISTER 3
spastor 0:2b446bf9b93b 63 #define H3LIS331DL_CTRL_REG3 0x22
spastor 0:2b446bf9b93b 64 #define H3LIS331DL_IHL BIT(7) //Interrupt active high,low. default is 0
spastor 0:2b446bf9b93b 65 #define H3LIS331DL_PP_OD BIT(6) //Push-pull/open drain selection on interrupt pad. default is 0
spastor 0:2b446bf9b93b 66 #define H3LIS331DL_LIR2 BIT(5) //Latch interrupt request on INT2_SRC register, with INT2_SRC register cleared by read INT2_SRC itself. default is 0
spastor 0:2b446bf9b93b 67 #define H3LIS331DL_I2_CFG BIT(3) //Data signal on INT2 pad control bits, default is 00
spastor 0:2b446bf9b93b 68 #define H3LIS331DL_LIR1 BIT(2) //Latch interrupt request on the INT1_SRC register, with the INT1_SRC register cleared by reading the INT1_SRC register.
spastor 0:2b446bf9b93b 69 #define H3LIS331DL_I1_CFG BIT(0) //Data signal on INT1 pad control bits, default is 00
spastor 0:2b446bf9b93b 70
spastor 0:2b446bf9b93b 71 //CONTROL REGISTER 4
spastor 0:2b446bf9b93b 72 #define H3LIS331DL_CTRL_REG4 0x23
spastor 0:2b446bf9b93b 73 #define H3LIS331DL_BDU BIT(7) //Block data update, default is 0
spastor 0:2b446bf9b93b 74 #define H3LIS331DL_BLE BIT(6) //Big/little endian data selection, default is 0
spastor 0:2b446bf9b93b 75 #define H3LIS331DL_FS BIT(4) //Full scale selection, default is 00(00:100g;01:200g;11:400g)
spastor 0:2b446bf9b93b 76 #define H3LIS331DL_ST_SIGN BIT(3) //
spastor 0:2b446bf9b93b 77 #define H3LIS331DL_ST BIT(1) //
spastor 0:2b446bf9b93b 78 #define H3LIS331DL_SIM BIT(0) // SPI serial interface mode selection, default is 0
spastor 0:2b446bf9b93b 79
spastor 0:2b446bf9b93b 80 //CONTROL REGISTER 5
spastor 0:2b446bf9b93b 81 #define H3LIS331DL_CTRL_REG5 0x24
spastor 0:2b446bf9b93b 82 #define H3LIS331DL_TURN_ON BIT(0) // Turn-on mode selection selection for sleep to wake function. default is 00
spastor 0:2b446bf9b93b 83
spastor 0:2b446bf9b93b 84 #define H3LIS331DL_HP_FILTER_RESET 0x25 //
spastor 0:2b446bf9b93b 85
spastor 0:2b446bf9b93b 86 //REFERENCE/DATA_CAPTURE
spastor 0:2b446bf9b93b 87 #define H3LIS331DL_REFERENCE_REG 0x26 //
spastor 0:2b446bf9b93b 88 #define H3LIS331DL_REF BIT(0) //
spastor 0:2b446bf9b93b 89
spastor 0:2b446bf9b93b 90 //STATUS_REG_AXIES
spastor 0:2b446bf9b93b 91 #define H3LIS331DL_STATUS_REG 0x27 //
spastor 0:2b446bf9b93b 92
spastor 0:2b446bf9b93b 93 //OUTPUT REGISTER
spastor 0:2b446bf9b93b 94 #define H3LIS331DL_OUT_X_L 0x28 //x-axis acceleration data
spastor 0:2b446bf9b93b 95 #define H3LIS331DL_OUT_X_H 0x29
spastor 0:2b446bf9b93b 96 #define H3LIS331DL_OUT_Y_L 0x2A //y-axis acceleration data
spastor 0:2b446bf9b93b 97 #define H3LIS331DL_OUT_Y_H 0x2B
spastor 0:2b446bf9b93b 98 #define H3LIS331DL_OUT_Z_L 0x2C //z-axis acceleration data
spastor 0:2b446bf9b93b 99 #define H3LIS331DL_OUT_Z_H 0x2D
spastor 0:2b446bf9b93b 100
spastor 0:2b446bf9b93b 101
spastor 0:2b446bf9b93b 102 //INTERRUPT 1 CONFIGURATION
spastor 0:2b446bf9b93b 103 #define H3LIS331DL_INT1_CFG 0x30
spastor 0:2b446bf9b93b 104
spastor 0:2b446bf9b93b 105 //INTERRUPT 2 CONFIGURATION
spastor 0:2b446bf9b93b 106 #define H3LIS331DL_INT2_CFG 0x34
spastor 0:2b446bf9b93b 107 #define H3LIS331DL_ANDOR BIT(7)
spastor 0:2b446bf9b93b 108 #define H3LIS331DL_INT_6D BIT(6)
spastor 0:2b446bf9b93b 109
spastor 0:2b446bf9b93b 110 //INT REGISTERS
spastor 0:2b446bf9b93b 111 #define H3LIS331DL_INT1_THS 0x32
spastor 0:2b446bf9b93b 112 #define H3LIS331DL_INT1_DURATION 0x33
spastor 0:2b446bf9b93b 113 #define H3LIS331DL_INT2_THS 0x36
spastor 0:2b446bf9b93b 114 #define H3LIS331DL_INT2_DURATION 0x37
spastor 0:2b446bf9b93b 115
spastor 0:2b446bf9b93b 116 //INTERRUPT 1 SOURCE REGISTER
spastor 0:2b446bf9b93b 117 #define H3LIS331DL_INT1_SRC 0x31
spastor 0:2b446bf9b93b 118 #define H3LIS331DL_INT2_SRC 0x35
spastor 0:2b446bf9b93b 119
spastor 0:2b446bf9b93b 120 //INT_CFG bit mask
spastor 0:2b446bf9b93b 121 #define H3LIS331DL_INT_AND 0x80
spastor 0:2b446bf9b93b 122 #define H3LIS331DL_INT_OR 0x00
spastor 0:2b446bf9b93b 123 #define H3LIS331DL_INT_ZHIE_ENABLE 0x20
spastor 0:2b446bf9b93b 124 #define H3LIS331DL_INT_ZHIE_DISABLE 0x00
spastor 0:2b446bf9b93b 125 #define H3LIS331DL_INT_ZLIE_ENABLE 0x10
spastor 0:2b446bf9b93b 126 #define H3LIS331DL_INT_ZLIE_DISABLE 0x00
spastor 0:2b446bf9b93b 127 #define H3LIS331DL_INT_YHIE_ENABLE 0x08
spastor 0:2b446bf9b93b 128 #define H3LIS331DL_INT_YHIE_DISABLE 0x00
spastor 0:2b446bf9b93b 129 #define H3LIS331DL_INT_YLIE_ENABLE 0x04
spastor 0:2b446bf9b93b 130 #define H3LIS331DL_INT_YLIE_DISABLE 0x00
spastor 0:2b446bf9b93b 131 #define H3LIS331DL_INT_XHIE_ENABLE 0x02
spastor 0:2b446bf9b93b 132 #define H3LIS331DL_INT_XHIE_DISABLE 0x00
spastor 0:2b446bf9b93b 133 #define H3LIS331DL_INT_XLIE_ENABLE 0x01
spastor 0:2b446bf9b93b 134 #define H3LIS331DL_INT_XLIE_DISABLE 0x00
spastor 0:2b446bf9b93b 135
spastor 0:2b446bf9b93b 136 //INT_SRC bit mask
spastor 0:2b446bf9b93b 137 #define H3LIS331DL_INT_SRC_IA 0x40
spastor 0:2b446bf9b93b 138 #define H3LIS331DL_INT_SRC_ZH 0x20
spastor 0:2b446bf9b93b 139 #define H3LIS331DL_INT_SRC_ZL 0x10
spastor 0:2b446bf9b93b 140 #define H3LIS331DL_INT_SRC_YH 0x08
spastor 0:2b446bf9b93b 141 #define H3LIS331DL_INT_SRC_YL 0x04
spastor 0:2b446bf9b93b 142 #define H3LIS331DL_INT_SRC_XH 0x02
spastor 0:2b446bf9b93b 143 #define H3LIS331DL_INT_SRC_XL 0x01
spastor 0:2b446bf9b93b 144
spastor 0:2b446bf9b93b 145 //STATUS REGISTER bit mask
spastor 0:2b446bf9b93b 146 #define H3LIS331DL_STATUS_REG_ZYXOR 0x80 // 1:new data set has over written the previous one
spastor 0:2b446bf9b93b 147 // 0:no overrun has occurred (default)
spastor 0:2b446bf9b93b 148 #define H3LIS331DL_STATUS_REG_ZOR 0x40 // 0:no overrun has occurred (default)
spastor 0:2b446bf9b93b 149 // 1:new Z-axis data has over written the previous one
spastor 0:2b446bf9b93b 150 #define H3LIS331DL_STATUS_REG_YOR 0x20 // 0:no overrun has occurred (default)
spastor 0:2b446bf9b93b 151 // 1:new Y-axis data has over written the previous one
spastor 0:2b446bf9b93b 152 #define H3LIS331DL_STATUS_REG_XOR 0x10 // 0:no overrun has occurred (default)
spastor 0:2b446bf9b93b 153 // 1:new X-axis data has over written the previous one
spastor 0:2b446bf9b93b 154 #define H3LIS331DL_STATUS_REG_ZYXDA 0x08 // 0:a new set of data is not yet avvious one
spastor 0:2b446bf9b93b 155 // 1:a new set of data is available
spastor 0:2b446bf9b93b 156 #define H3LIS331DL_STATUS_REG_ZDA 0x04 // 0:a new data for the Z-Axis is not availvious one
spastor 0:2b446bf9b93b 157 // 1:a new data for the Z-Axis is available
spastor 0:2b446bf9b93b 158 #define H3LIS331DL_STATUS_REG_YDA 0x02 // 0:a new data for the Y-Axis is not available
spastor 0:2b446bf9b93b 159 // 1:a new data for the Y-Axis is available
spastor 0:2b446bf9b93b 160 #define H3LIS331DL_STATUS_REG_XDA 0x01 // 0:a new data for the X-Axis is not available
spastor 0:2b446bf9b93b 161 // 1:a new data for the X-Axis is available
spastor 0:2b446bf9b93b 162 #define H3LIS331DL_DATAREADY_BIT H3LIS331DL_STATUS_REG_ZYXDA
spastor 0:2b446bf9b93b 163
spastor 0:2b446bf9b93b 164 #define ValBit(VAR,Place) (VAR & (1<<Place))
spastor 0:2b446bf9b93b 165 #define BIT(x) ( (x) )
spastor 0:2b446bf9b93b 166
spastor 0:2b446bf9b93b 167 typedef uint8_t H3LIS331DL_Axis_t;
spastor 0:2b446bf9b93b 168 typedef uint8_t H3LIS331DL_IntConf_t;
spastor 0:2b446bf9b93b 169
spastor 0:2b446bf9b93b 170 //define structure
spastor 0:2b446bf9b93b 171 typedef enum {
spastor 0:2b446bf9b93b 172 MEMS_SUCCESS = 0x01,
spastor 0:2b446bf9b93b 173 MEMS_ERROR = 0x00
spastor 0:2b446bf9b93b 174 } status_t;
spastor 0:2b446bf9b93b 175
spastor 0:2b446bf9b93b 176 typedef enum {
spastor 0:2b446bf9b93b 177 MEMS_ENABLE = 0x01,
spastor 0:2b446bf9b93b 178 MEMS_DISABLE = 0x00
spastor 0:2b446bf9b93b 179 } State_t;
spastor 0:2b446bf9b93b 180
spastor 0:2b446bf9b93b 181 typedef struct {
spastor 0:2b446bf9b93b 182 int16_t AXIS_X;
spastor 0:2b446bf9b93b 183 int16_t AXIS_Y;
spastor 0:2b446bf9b93b 184 int16_t AXIS_Z;
spastor 0:2b446bf9b93b 185 } AxesRaw_t;
spastor 0:2b446bf9b93b 186
spastor 0:2b446bf9b93b 187 typedef enum {
spastor 0:2b446bf9b93b 188 H3LIS331DL_ODR_50Hz = 0x00,
spastor 0:2b446bf9b93b 189 H3LIS331DL_ODR_100Hz = 0x01,
spastor 0:2b446bf9b93b 190 H3LIS331DL_ODR_400Hz = 0x02,
spastor 0:2b446bf9b93b 191 H3LIS331DL_ODR_1000Hz = 0x03
spastor 0:2b446bf9b93b 192 } H3LIS331DL_ODR_t;
spastor 0:2b446bf9b93b 193
spastor 0:2b446bf9b93b 194 typedef enum {
spastor 0:2b446bf9b93b 195 H3LIS331DL_CONTINUOUS_MODE = 0x00,
spastor 0:2b446bf9b93b 196 H3LIS331DL_SINGLE_MODE = 0x01,
spastor 0:2b446bf9b93b 197 H3LIS331DL_SLEEP_MODE = 0x02
spastor 0:2b446bf9b93b 198 } H3LIS331DL_Mode_M_t;
spastor 0:2b446bf9b93b 199
spastor 0:2b446bf9b93b 200 typedef enum {
spastor 0:2b446bf9b93b 201 H3LIS331DL_POWER_DOWN = 0x00,
spastor 0:2b446bf9b93b 202 H3LIS331DL_NORMAL = 0x01,
spastor 0:2b446bf9b93b 203 H3LIS331DL_LOW_POWER_05 = 0x02,
spastor 0:2b446bf9b93b 204 H3LIS331DL_LOW_POWER_1 = 0x03,
spastor 0:2b446bf9b93b 205 H3LIS331DL_LOW_POWER_2 = 0x04,
spastor 0:2b446bf9b93b 206 H3LIS331DL_LOW_POWER_5 = 0x05,
spastor 0:2b446bf9b93b 207 H3LIS331DL_LOW_POWER_10 = 0x06,
spastor 0:2b446bf9b93b 208 } H3LIS331DL_Mode_t;
spastor 0:2b446bf9b93b 209
spastor 0:2b446bf9b93b 210 typedef enum {
spastor 0:2b446bf9b93b 211 H3LIS331DL_HPM_NORMAL_MODE_RES = 0x00,
spastor 0:2b446bf9b93b 212 H3LIS331DL_HPM_REF_SIGNAL = 0x01,
spastor 0:2b446bf9b93b 213 H3LIS331DL_HPM_NORMAL_MODE = 0x02,
spastor 0:2b446bf9b93b 214 } H3LIS331DL_HPFMode_t;
spastor 0:2b446bf9b93b 215
spastor 0:2b446bf9b93b 216 typedef enum {
spastor 0:2b446bf9b93b 217 H3LIS331DL_HPFCF_0 = 0x00,
spastor 0:2b446bf9b93b 218 H3LIS331DL_HPFCF_1 = 0x01,
spastor 0:2b446bf9b93b 219 H3LIS331DL_HPFCF_2 = 0x02,
spastor 0:2b446bf9b93b 220 H3LIS331DL_HPFCF_3 = 0x03,
spastor 0:2b446bf9b93b 221 } H3LIS331DL_HPFCutOffFreq_t;
spastor 0:2b446bf9b93b 222
spastor 0:2b446bf9b93b 223 typedef enum {
spastor 0:2b446bf9b93b 224 H3LIS331DL_INT_SOURCE = 0x00,
spastor 0:2b446bf9b93b 225 H3LIS331DL_INT_1OR2_SOURCE = 0x01,
spastor 0:2b446bf9b93b 226 H3LIS331DL_DATA_READY = 0x02,
spastor 0:2b446bf9b93b 227 H3LIS331DL_BOOT_RUNNING = 0x03
spastor 0:2b446bf9b93b 228 } H3LIS331DL_INT_Conf_t;
spastor 0:2b446bf9b93b 229
spastor 0:2b446bf9b93b 230 typedef enum {
spastor 0:2b446bf9b93b 231 H3LIS331DL_SLEEP_TO_WAKE_DIS = 0x00,
spastor 0:2b446bf9b93b 232 H3LIS331DL_SLEEP_TO_WAKE_ENA = 0x03,
spastor 0:2b446bf9b93b 233 } H3LIS331DL_Sleep_To_Wake_Conf_t;
spastor 0:2b446bf9b93b 234
spastor 0:2b446bf9b93b 235 typedef enum {
spastor 0:2b446bf9b93b 236 H3LIS331DL_FULLSCALE_2 = 0x00,
spastor 0:2b446bf9b93b 237 H3LIS331DL_FULLSCALE_4 = 0x01,
spastor 0:2b446bf9b93b 238 H3LIS331DL_FULLSCALE_8 = 0x03,
spastor 0:2b446bf9b93b 239 } H3LIS331DL_Fullscale_t;
spastor 0:2b446bf9b93b 240
spastor 0:2b446bf9b93b 241 typedef enum {
spastor 0:2b446bf9b93b 242 H3LIS331DL_BLE_LSB = 0x00,
spastor 0:2b446bf9b93b 243 H3LIS331DL_BLE_MSB = 0x01
spastor 0:2b446bf9b93b 244 } H3LIS331DL_Endianess_t;
spastor 0:2b446bf9b93b 245
spastor 0:2b446bf9b93b 246 typedef enum {
spastor 0:2b446bf9b93b 247 H3LIS331DL_SPI_4_WIRE = 0x00,
spastor 0:2b446bf9b93b 248 H3LIS331DL_SPI_3_WIRE = 0x01
spastor 0:2b446bf9b93b 249 } H3LIS331DL_SPIMode_t;
spastor 0:2b446bf9b93b 250
spastor 0:2b446bf9b93b 251 typedef enum {
spastor 0:2b446bf9b93b 252 H3LIS331DL_X_ENABLE = 0x01,
spastor 0:2b446bf9b93b 253 H3LIS331DL_X_DISABLE = 0x00,
spastor 0:2b446bf9b93b 254 H3LIS331DL_Y_ENABLE = 0x02,
spastor 0:2b446bf9b93b 255 H3LIS331DL_Y_DISABLE = 0x00,
spastor 0:2b446bf9b93b 256 H3LIS331DL_Z_ENABLE = 0x04,
spastor 0:2b446bf9b93b 257 H3LIS331DL_Z_DISABLE = 0x00
spastor 0:2b446bf9b93b 258 } H3LIS331DL_AXISenable_t;
spastor 0:2b446bf9b93b 259
spastor 0:2b446bf9b93b 260 typedef enum {
spastor 0:2b446bf9b93b 261 H3LIS331DL_UP_SX = 0x44,
spastor 0:2b446bf9b93b 262 H3LIS331DL_UP_DX = 0x42,
spastor 0:2b446bf9b93b 263 H3LIS331DL_DW_SX = 0x41,
spastor 0:2b446bf9b93b 264 H3LIS331DL_DW_DX = 0x48,
spastor 0:2b446bf9b93b 265 H3LIS331DL_TOP = 0x60,
spastor 0:2b446bf9b93b 266 H3LIS331DL_BOTTOM = 0x50
spastor 0:2b446bf9b93b 267 } H3LIS331DL_POSITION_6D_t;
spastor 0:2b446bf9b93b 268
spastor 0:2b446bf9b93b 269 typedef enum {
spastor 0:2b446bf9b93b 270 H3LIS331DL_INT_MODE_OR = 0x00,
spastor 0:2b446bf9b93b 271 H3LIS331DL_INT_MODE_6D_MOVEMENT = 0x01,
spastor 0:2b446bf9b93b 272 H3LIS331DL_INT_MODE_AND = 0x02,
spastor 0:2b446bf9b93b 273 H3LIS331DL_INT_MODE_6D_POSITION = 0x03
spastor 0:2b446bf9b93b 274 } H3LIS331DL_IntMode_t;
spastor 0:2b446bf9b93b 275
spastor 0:2b446bf9b93b 276
spastor 0:2b446bf9b93b 277 class H3LIS331DL
spastor 0:2b446bf9b93b 278 {
spastor 0:2b446bf9b93b 279 public:
spastor 0:2b446bf9b93b 280 H3LIS331DL(PinName sda, PinName scl){
spastor 0:2b446bf9b93b 281 i2c = new I2C::I2C(sda, scl);
spastor 0:2b446bf9b93b 282 i2c->frequency(400000);
spastor 0:2b446bf9b93b 283 _adjVal[0] = _adjVal[1] = _adjVal[2] = 0;
spastor 0:2b446bf9b93b 284 };
spastor 0:2b446bf9b93b 285 void init(H3LIS331DL_ODR_t odr = H3LIS331DL_ODR_100Hz,
spastor 0:2b446bf9b93b 286 H3LIS331DL_Mode_t mode = H3LIS331DL_NORMAL,H3LIS331DL_Fullscale_t fullScale = H3LIS331DL_FULLSCALE_2);
spastor 0:2b446bf9b93b 287 void importPara(int16_t val_x, int16_t val_y, int16_t val_z);
spastor 0:2b446bf9b93b 288 void readXYZ(int16_t* x, int16_t* y, int16_t* z);
spastor 0:2b446bf9b93b 289 void getAcceleration(double* xyz);
spastor 0:2b446bf9b93b 290 //Sensor Configuration Functions
spastor 0:2b446bf9b93b 291 status_t getWHO_AM_I(uint8_t * val);
spastor 0:2b446bf9b93b 292 status_t setODR(H3LIS331DL_ODR_t dr);
spastor 0:2b446bf9b93b 293 status_t setMode(H3LIS331DL_Mode_t pm);
spastor 0:2b446bf9b93b 294 status_t setAxis(H3LIS331DL_Axis_t axis);
spastor 0:2b446bf9b93b 295 status_t setFullScale(H3LIS331DL_Fullscale_t fs);
spastor 0:2b446bf9b93b 296 status_t setBDU(State_t bdu);
spastor 0:2b446bf9b93b 297 status_t setBLE(H3LIS331DL_Endianess_t ble);
spastor 0:2b446bf9b93b 298 status_t setSelfTest(State_t st);
spastor 0:2b446bf9b93b 299 status_t setSelfTestSign(State_t st_sign);
spastor 0:2b446bf9b93b 300 status_t turnONEnable(H3LIS331DL_Sleep_To_Wake_Conf_t stw);
spastor 0:2b446bf9b93b 301 status_t setBOOT(State_t boot);
spastor 0:2b446bf9b93b 302 status_t setFDS(State_t fds);
spastor 0:2b446bf9b93b 303 status_t setSPI34Wire(H3LIS331DL_SPIMode_t sim);
spastor 0:2b446bf9b93b 304
spastor 0:2b446bf9b93b 305 //Filtering Functions
spastor 0:2b446bf9b93b 306 status_t setHPFMode(H3LIS331DL_HPFMode_t hpm);
spastor 0:2b446bf9b93b 307 status_t setHPFCutOFF(H3LIS331DL_HPFCutOffFreq_t hpf);
spastor 0:2b446bf9b93b 308 status_t setFilterDataSel(State_t state);
spastor 0:2b446bf9b93b 309 status_t setReference(int8_t ref);
spastor 0:2b446bf9b93b 310
spastor 0:2b446bf9b93b 311 //Interrupt Functions
spastor 0:2b446bf9b93b 312 status_t setIntHighLow(State_t hil);
spastor 0:2b446bf9b93b 313 status_t setIntPPOD(State_t pp_od);
spastor 0:2b446bf9b93b 314 status_t setInt1DataSign(H3LIS331DL_INT_Conf_t i_cfg);
spastor 0:2b446bf9b93b 315 status_t setInt2DataSign(H3LIS331DL_INT_Conf_t i_cfg);
spastor 0:2b446bf9b93b 316 status_t setInt1HPEnable(State_t stat);
spastor 0:2b446bf9b93b 317 status_t setInt2HPEnable(State_t stat);
spastor 0:2b446bf9b93b 318 status_t int1LatchEnable(State_t latch);
spastor 0:2b446bf9b93b 319 status_t int2LatchEnable(State_t latch);
spastor 0:2b446bf9b93b 320 status_t resetInt1Latch(void);
spastor 0:2b446bf9b93b 321 status_t resetInt2Latch(void);
spastor 0:2b446bf9b93b 322 status_t setInt1Configuration(H3LIS331DL_IntConf_t ic);
spastor 0:2b446bf9b93b 323 status_t setInt2Configuration(H3LIS331DL_IntConf_t ic);
spastor 0:2b446bf9b93b 324 status_t setInt1Threshold(uint8_t ths);
spastor 0:2b446bf9b93b 325 status_t setInt2Threshold(uint8_t ths);
spastor 0:2b446bf9b93b 326 status_t setInt1Duration(uint8_t id);
spastor 0:2b446bf9b93b 327 status_t setInt2Duration(uint8_t id);
spastor 0:2b446bf9b93b 328 status_t setInt1Mode(H3LIS331DL_IntMode_t int_mode);
spastor 0:2b446bf9b93b 329 status_t setInt2Mode(H3LIS331DL_IntMode_t int_mode);
spastor 0:2b446bf9b93b 330 status_t getInt1Src(uint8_t* val);
spastor 0:2b446bf9b93b 331 status_t getInt2Src(uint8_t* val);
spastor 0:2b446bf9b93b 332 status_t getInt1SrcBit(uint8_t statusBIT, uint8_t* val);
spastor 0:2b446bf9b93b 333 status_t getInt2SrcBit(uint8_t statusBIT, uint8_t* val);
spastor 0:2b446bf9b93b 334
spastor 0:2b446bf9b93b 335 //Other Reading Functions
spastor 0:2b446bf9b93b 336 status_t getStatusReg(uint8_t* val);
spastor 0:2b446bf9b93b 337 status_t getStatusBit(uint8_t statusBIT, uint8_t* val);
spastor 0:2b446bf9b93b 338 status_t getAccAxesRaw(AxesRaw_t* buff);
spastor 0:2b446bf9b93b 339 status_t get6DPositionInt1(uint8_t* val);
spastor 0:2b446bf9b93b 340 status_t get6DPositionInt2(uint8_t* val);
spastor 0:2b446bf9b93b 341
spastor 0:2b446bf9b93b 342 private:
spastor 0:2b446bf9b93b 343 I2C * i2c;
spastor 0:2b446bf9b93b 344 uint8_t readReg(uint8_t deviceAddr, uint8_t Reg, uint8_t* Data);
spastor 0:2b446bf9b93b 345 uint8_t writeReg(uint8_t deviceAddress, uint8_t WriteAddr, uint8_t Data);
spastor 0:2b446bf9b93b 346 int16_t _adjVal[3];
spastor 0:2b446bf9b93b 347 };
spastor 0:2b446bf9b93b 348
spastor 0:2b446bf9b93b 349 #endif /*__H3LIS331DL_H */