Manuel Caballero / ADXL345
Committer:
mcm
Date:
Sat Aug 19 08:18:27 2017 +0000
Revision:
1:186b5a33dce3
Parent:
0:5e0fa5be068d
Child:
2:b96d481934ae
The header file is ready to be tested. All the registers were implemented but FIFO?s.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 0:5e0fa5be068d 1 /**
mcm 0:5e0fa5be068d 2 * @brief ADXL345.h
mcm 1:186b5a33dce3 3 * @details 3-Axis, ±2 g/±4 g/±8 g/±16 g Digital Accelerometer.
mcm 0:5e0fa5be068d 4 * Header file.
mcm 0:5e0fa5be068d 5 *
mcm 0:5e0fa5be068d 6 *
mcm 0:5e0fa5be068d 7 * @return NA
mcm 0:5e0fa5be068d 8 *
mcm 0:5e0fa5be068d 9 * @author Manuel Caballero
mcm 0:5e0fa5be068d 10 * @date 19/August/2017
mcm 0:5e0fa5be068d 11 * @version 19/August/2017 The ORIGIN
mcm 1:186b5a33dce3 12 * @pre Although the ADXL345 can be handled by SPI or I2C, this library is only
mcm 1:186b5a33dce3 13 * adapted to be used by I2C.
mcm 1:186b5a33dce3 14 * @pre FIFO functions are NOT implemented.
mcm 0:5e0fa5be068d 15 * @warning NaN
mcm 0:5e0fa5be068d 16 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 0:5e0fa5be068d 17 */
mcm 0:5e0fa5be068d 18 #ifndef ADXL345_H
mcm 0:5e0fa5be068d 19 #define ADXL345_H
mcm 0:5e0fa5be068d 20
mcm 0:5e0fa5be068d 21 #include "mbed.h"
mcm 0:5e0fa5be068d 22
mcm 0:5e0fa5be068d 23
mcm 0:5e0fa5be068d 24 /**
mcm 0:5e0fa5be068d 25 Example:
mcm 0:5e0fa5be068d 26
mcm 0:5e0fa5be068d 27 #include "mbed.h"
mcm 0:5e0fa5be068d 28 #include "ADXL345.h"
mcm 0:5e0fa5be068d 29
mcm 0:5e0fa5be068d 30 // ADXL345 myLightSensor ( I2C_SDA, I2C_SCL, ADXL345::ADXL345_ADDR_L, 400000 ); //[todo]
mcm 0:5e0fa5be068d 31 Serial pc ( USBTX, USBRX ); // tx, rx
mcm 0:5e0fa5be068d 32
mcm 0:5e0fa5be068d 33 Ticker serial;
mcm 0:5e0fa5be068d 34
mcm 0:5e0fa5be068d 35 DigitalOut myled(LED1);
mcm 0:5e0fa5be068d 36
mcm 0:5e0fa5be068d 37
mcm 0:5e0fa5be068d 38 void sendDATA ( void )
mcm 0:5e0fa5be068d 39 {
mcm 0:5e0fa5be068d 40 float myLux = 0;
mcm 0:5e0fa5be068d 41
mcm 0:5e0fa5be068d 42 myled = 0;
mcm 0:5e0fa5be068d 43
mcm 0:5e0fa5be068d 44
mcm 0:5e0fa5be068d 45
mcm 0:5e0fa5be068d 46 // pc.printf( "Lux: %0.1f\r\n", myLux );
mcm 0:5e0fa5be068d 47
mcm 0:5e0fa5be068d 48 myled = 1;
mcm 0:5e0fa5be068d 49
mcm 0:5e0fa5be068d 50 }
mcm 0:5e0fa5be068d 51
mcm 0:5e0fa5be068d 52
mcm 0:5e0fa5be068d 53 int main() {
mcm 0:5e0fa5be068d 54 pc.baud ( 115200 );
mcm 0:5e0fa5be068d 55 serial.attach( &sendDATA, 0.5 ); // the address of the function to be attached ( sendDATA ) and the interval ( 0.5s )
mcm 0:5e0fa5be068d 56
mcm 0:5e0fa5be068d 57 // Let the callbacks take care of everything
mcm 0:5e0fa5be068d 58 while(1) sleep();
mcm 0:5e0fa5be068d 59 }
mcm 0:5e0fa5be068d 60 */
mcm 0:5e0fa5be068d 61
mcm 0:5e0fa5be068d 62 /*!
mcm 0:5e0fa5be068d 63 Library for the ADXL345 3-Axis, ±2 g/±4 g/±8 g/±16 g Digital Accelerometer.
mcm 0:5e0fa5be068d 64 */
mcm 0:5e0fa5be068d 65 class ADXL345
mcm 0:5e0fa5be068d 66 {
mcm 0:5e0fa5be068d 67 public:
mcm 0:5e0fa5be068d 68 /**
mcm 0:5e0fa5be068d 69 * @brief DEFAULT ADDRESSES
mcm 0:5e0fa5be068d 70 */
mcm 0:5e0fa5be068d 71 typedef enum {
mcm 0:5e0fa5be068d 72 ADXL345_ALT_ADDRESS_LOW = ( 0x53 << 1 ), /**< Addr pin = GND */
mcm 0:5e0fa5be068d 73 ADXL345_ALT_ADDRESS_HIGH = ( 0x1D << 1 ) /**< Addr pin = VDD */
mcm 0:5e0fa5be068d 74 } ADXL345_address_t;
mcm 0:5e0fa5be068d 75
mcm 0:5e0fa5be068d 76
mcm 0:5e0fa5be068d 77 /**
mcm 0:5e0fa5be068d 78 * @brief REGISTERS MAP
mcm 0:5e0fa5be068d 79 */
mcm 0:5e0fa5be068d 80 #define ADXL345_DEVID 0x00 /*!< Device ID */
mcm 0:5e0fa5be068d 81 #define ADXL345_THRESH_TAP 0x1D /*!< Tap threshold */
mcm 0:5e0fa5be068d 82 #define ADXL345_OFSX 0x1E /*!< X-axis offset */
mcm 0:5e0fa5be068d 83 #define ADXL345_OFSY 0x1F /*!< Y-axis offset */
mcm 0:5e0fa5be068d 84 #define ADXL345_OFSZ 0x20 /*!< Z-axis offset */
mcm 0:5e0fa5be068d 85 #define ADXL345_DUR 0x21 /*!< Tap duration */
mcm 0:5e0fa5be068d 86 #define ADXL345_LATENT 0x22 /*!< Tap latency */
mcm 0:5e0fa5be068d 87 #define ADXL345_WINDOW 0x23 /*!< Tap window */
mcm 0:5e0fa5be068d 88 #define ADXL345_THRESH_ACT 0x24 /*!< Activity threshold */
mcm 0:5e0fa5be068d 89 #define ADXL345_THRESH_INACT 0x25 /*!< Inactivity threshold */
mcm 0:5e0fa5be068d 90 #define ADXL345_TIME_INACT 0x26 /*!< Inactivity time */
mcm 0:5e0fa5be068d 91 #define ADXL345_ACT_INACT_CTL 0x27 /*!< Axis enable control for activity and inactivity detection */
mcm 0:5e0fa5be068d 92 #define ADXL345_THRESH_FF 0x28 /*!< Free-fall threshold */
mcm 0:5e0fa5be068d 93 #define ADXL345_TIME_FF 0x29 /*!< Free-fall time */
mcm 0:5e0fa5be068d 94 #define ADXL345_TAP_AXES 0x2A /*!< Axis control for single tap/double tap */
mcm 0:5e0fa5be068d 95 #define ADXL345_ACT_TAP_STATUS 0x2B /*!< Source of single tap/double tap */
mcm 0:5e0fa5be068d 96 #define ADXL345_BW_RATE 0x2C /*!< Data rate and power mode control */
mcm 0:5e0fa5be068d 97 #define ADXL345_POWER_CTL 0x2D /*!< Power-saving features control */
mcm 0:5e0fa5be068d 98 #define ADXL345_INT_ENABLE 0x2E /*!< Interrupt enable control */
mcm 0:5e0fa5be068d 99 #define ADXL345_INT_MAP 0x2F /*!< Interrupt mapping control */
mcm 0:5e0fa5be068d 100 #define ADXL345_INT_SOURCE 0x30 /*!< Source of interrupts */
mcm 0:5e0fa5be068d 101 #define ADXL345_DATA_FORMAT 0x31 /*!< Data format control */
mcm 0:5e0fa5be068d 102 #define ADXL345_DATAX0 0x32 /*!< X-Axis Data 0 */
mcm 0:5e0fa5be068d 103 #define ADXL345_DATAX1 0x33 /*!< X-Axis Data 1 */
mcm 0:5e0fa5be068d 104 #define ADXL345_DATAY0 0x34 /*!< Y-Axis Data 0 */
mcm 0:5e0fa5be068d 105 #define ADXL345_DATAY1 0x35 /*!< Y-Axis Data 1 */
mcm 0:5e0fa5be068d 106 #define ADXL345_DATAZ0 0x36 /*!< Z-Axis Data 0 */
mcm 0:5e0fa5be068d 107 #define ADXL345_DATAZ1 0x37 /*!< Z-Axis Data 1 */
mcm 0:5e0fa5be068d 108 #define ADXL345_FIFO_CTL 0x38 /*!< FIFO control */
mcm 0:5e0fa5be068d 109 #define ADXL345_FIFO_STATUS 0x39 /*!< FIFO status */
mcm 0:5e0fa5be068d 110
mcm 0:5e0fa5be068d 111
mcm 0:5e0fa5be068d 112 /* Commands Registers */
mcm 0:5e0fa5be068d 113 /**
mcm 0:5e0fa5be068d 114 * @brief DEVID
mcm 0:5e0fa5be068d 115 */
mcm 0:5e0fa5be068d 116 #define DEVID_ID 0xE5 /*!< A fixed device ID code */
mcm 0:5e0fa5be068d 117
mcm 0:5e0fa5be068d 118
mcm 0:5e0fa5be068d 119 /**
mcm 0:5e0fa5be068d 120 * @brief ACT_INACT_CTL
mcm 0:5e0fa5be068d 121 */
mcm 0:5e0fa5be068d 122 /* Bit 7 : ACT ac/dc ( D7 ). */
mcm 0:5e0fa5be068d 123 typedef enum {
mcm 0:5e0fa5be068d 124 ACTIVITY_DC_Enabled = 1, /*!< Activity DC-Coupled Enabled. */
mcm 0:5e0fa5be068d 125 ACTIVITY_AC_Enabled = 2 /*!< Activity AC-Coupled Enabled. */
mcm 0:5e0fa5be068d 126 } ADXL345_act_inact_ctl_activity_dc_coupled_t;
mcm 0:5e0fa5be068d 127
mcm 0:5e0fa5be068d 128
mcm 0:5e0fa5be068d 129 /* Bit 6 - 4 : ACT_X ( D6 ), ACT_Y ( D5 ) y ACT_Z enable ( D4 ). */
mcm 0:5e0fa5be068d 130 typedef enum {
mcm 0:5e0fa5be068d 131 ACT_X_Enabled = 1, /*!< X-axis Enabled. */
mcm 0:5e0fa5be068d 132 ACT_Y_Enabled = 2, /*!< Y-axis Enabled. */
mcm 0:5e0fa5be068d 133 ACT_Z_Enabled = 3, /*!< Z-axis Enabled. */
mcm 0:5e0fa5be068d 134 ACT_YZ_Enabled = 4, /*!< YZ-axis Enabled. */
mcm 0:5e0fa5be068d 135 ACT_XZ_Enabled = 5, /*!< XZ-axis Enabled. */
mcm 0:5e0fa5be068d 136 ACT_XY_Enabled = 6, /*!< XY-axis Enabled. */
mcm 0:5e0fa5be068d 137 ACT_XYZ_Enabled = 7, /*!< XYZ-axis Enabled. */
mcm 0:5e0fa5be068d 138 ACT_XYZ_Disabled = 8 /*!< XYZ-axis Disabled. */
mcm 0:5e0fa5be068d 139 } ADXL345_act_inact_ctl_activity_axis_t;
mcm 0:5e0fa5be068d 140
mcm 0:5e0fa5be068d 141
mcm 0:5e0fa5be068d 142 /* Bit 3 : INACT ac/dc ( D3 ). */
mcm 0:5e0fa5be068d 143 typedef enum {
mcm 0:5e0fa5be068d 144 INACTIVITY_DC_Enabled = 1, /*!< Inactivity DC-Coupled Enabled. */
mcm 0:5e0fa5be068d 145 INACTIVITY_AC_Enabled = 2 /*!< Inactivity AC-Coupled Enabled. */
mcm 0:5e0fa5be068d 146 } ADXL345_act_inact_ctl_inactivity_dc_coupled_t;
mcm 0:5e0fa5be068d 147
mcm 0:5e0fa5be068d 148
mcm 0:5e0fa5be068d 149 /* Bit 2 - 0 : INACT_X ( D2 ), INACT_X ( D1 ) y INACT_X enable ( D0 ). */
mcm 0:5e0fa5be068d 150 typedef enum {
mcm 0:5e0fa5be068d 151 INACT_X_Enabled = 1, /*!< X-axis Enabled. */
mcm 0:5e0fa5be068d 152 INACT_Y_Enabled = 2, /*!< Y-axis Enabled. */
mcm 0:5e0fa5be068d 153 INACT_Z_Enabled = 3, /*!< Z-axis Enabled. */
mcm 0:5e0fa5be068d 154 INACT_YZ_Enabled = 4, /*!< YZ-axis Enabled. */
mcm 0:5e0fa5be068d 155 INACT_XZ_Enabled = 5, /*!< XZ-axis Enabled. */
mcm 0:5e0fa5be068d 156 INACT_XY_Enabled = 6, /*!< XY-axis Enabled. */
mcm 0:5e0fa5be068d 157 INACT_XYZ_Enabled = 7, /*!< XYZ-axis Enabled. */
mcm 0:5e0fa5be068d 158 INACT_XYZ_Disabled = 8 /*!< XYZ-axis Disabled. */
mcm 0:5e0fa5be068d 159 } ADXL345_act_inact_ctl_inactivity_axis_t;
mcm 0:5e0fa5be068d 160
mcm 0:5e0fa5be068d 161
mcm 0:5e0fa5be068d 162
mcm 0:5e0fa5be068d 163 /**
mcm 0:5e0fa5be068d 164 * @brief TAP_AXES
mcm 0:5e0fa5be068d 165 */
mcm 0:5e0fa5be068d 166 /* Bit 3 : SUPPRESS ( D3 ). */
mcm 0:5e0fa5be068d 167 typedef enum {
mcm 0:5e0fa5be068d 168 SUPPRESS_Enabled = 1, /*!< SUPPRESS Enabled. */
mcm 0:5e0fa5be068d 169 SUPPRESS_Disabled = 2 /*!< SUPPRESS Disabled. */
mcm 0:5e0fa5be068d 170 } ADXL345_tap_axes_suppress_t;
mcm 0:5e0fa5be068d 171
mcm 0:5e0fa5be068d 172 /* Bit 2 - 0 : TAP_X ( D2 ), TAP_Y ( D1 ) y TAP_Z enable ( D0 ). */
mcm 0:5e0fa5be068d 173 typedef enum {
mcm 0:5e0fa5be068d 174 TAP_X_Enabled = 1, /*!< X-axis Enabled. */
mcm 0:5e0fa5be068d 175 TAP_Y_Enabled = 2, /*!< Y-axis Enabled. */
mcm 0:5e0fa5be068d 176 TAP_Z_Enabled = 3, /*!< Z-axis Enabled. */
mcm 0:5e0fa5be068d 177 TAP_YZ_Enabled = 4, /*!< YZ-axis Enabled. */
mcm 0:5e0fa5be068d 178 TAP_XZ_Enabled = 5, /*!< XZ-axis Enabled. */
mcm 0:5e0fa5be068d 179 TAP_XY_Enabled = 6, /*!< XY-axis Enabled. */
mcm 0:5e0fa5be068d 180 TAP_XYZ_Enabled = 7, /*!< XYZ-axis Enabled. */
mcm 0:5e0fa5be068d 181 TAP_XYZ_Disabled = 8 /*!< XYZ-axis Disabled. */
mcm 0:5e0fa5be068d 182 } ADXL345_tap_axes_axis_t;
mcm 0:5e0fa5be068d 183
mcm 0:5e0fa5be068d 184
mcm 0:5e0fa5be068d 185
mcm 0:5e0fa5be068d 186 /**
mcm 0:5e0fa5be068d 187 * @brief BW_RATE
mcm 0:5e0fa5be068d 188 */
mcm 0:5e0fa5be068d 189 /* Bit 4 : LOW_POWER ( D4 ). */
mcm 0:5e0fa5be068d 190 typedef enum {
mcm 0:5e0fa5be068d 191 BW_RATE_LOW_POWER_Enabled = true, /*!< LOW_POWER Enabled. */
mcm 0:5e0fa5be068d 192 BW_RATE_LOW_POWER_Disabled = false /*!< LOW_POWER Disabled. */
mcm 0:5e0fa5be068d 193 } AXDL345_bw_rate_low_power_t;
mcm 0:5e0fa5be068d 194
mcm 0:5e0fa5be068d 195
mcm 0:5e0fa5be068d 196 /* Bit 3 - 0 : RATE ( D3 - D0 ). */
mcm 0:5e0fa5be068d 197 /* Normal operation */
mcm 0:5e0fa5be068d 198 typedef enum {
mcm 0:5e0fa5be068d 199 BW_RATE_RATE_3200HZ = 0x0F, /*!< RATE 3200 Hz. */
mcm 0:5e0fa5be068d 200 BW_RATE_RATE_1600HZ = 0x0E, /*!< RATE 1600 Hz. */
mcm 0:5e0fa5be068d 201 BW_RATE_RATE_800HZ = 0x0D, /*!< RATE 800 Hz. */
mcm 0:5e0fa5be068d 202 BW_RATE_RATE_400HZ = 0x0C, /*!< RATE 400 Hz. */
mcm 0:5e0fa5be068d 203 BW_RATE_RATE_200HZ = 0x0B, /*!< RATE 200 Hz. */
mcm 0:5e0fa5be068d 204 BW_RATE_RATE_100HZ = 0x0A, /*!< RATE 100 Hz. ( DEFAULT ) */
mcm 0:5e0fa5be068d 205 BW_RATE_RATE_50HZ = 0x09, /*!< RATE 50 Hz. */
mcm 0:5e0fa5be068d 206 BW_RATE_RATE_25HZ = 0x08, /*!< RATE 25 Hz. */
mcm 0:5e0fa5be068d 207 BW_RATE_RATE_12_5HZ = 0x07, /*!< RATE 12.5 Hz. */
mcm 0:5e0fa5be068d 208 BW_RATE_RATE_6_25HZ = 0x06, /*!< RATE 6.25 Hz. */
mcm 0:5e0fa5be068d 209 BW_RATE_RATE_3_13HZ = 0x05, /*!< RATE 3.13 Hz. */
mcm 0:5e0fa5be068d 210 BW_RATE_RATE_1_56HZ = 0x04, /*!< RATE 1.56 Hz. */
mcm 0:5e0fa5be068d 211 BW_RATE_RATE_0_78HZ = 0x03, /*!< RATE 0.78 Hz. */
mcm 0:5e0fa5be068d 212 BW_RATE_RATE_0_39HZ = 0x02, /*!< RATE 0.39 Hz. */
mcm 0:5e0fa5be068d 213 BW_RATE_RATE_0_20HZ = 0x01, /*!< RATE 0.20 Hz. */
mcm 0:5e0fa5be068d 214 BW_RATE_RATE_0_10HZ = 0x00 /*!< RATE 0.10 Hz. */
mcm 0:5e0fa5be068d 215 } AXDL345_bw_rate_rate_t;
mcm 0:5e0fa5be068d 216
mcm 0:5e0fa5be068d 217
mcm 0:5e0fa5be068d 218
mcm 0:5e0fa5be068d 219 /**
mcm 0:5e0fa5be068d 220 * @brief POWER_CTL
mcm 0:5e0fa5be068d 221 */
mcm 0:5e0fa5be068d 222 /* Bit 5 : LINK ( D5 ). */
mcm 0:5e0fa5be068d 223 typedef enum {
mcm 0:5e0fa5be068d 224 LINK_Enabled = 1, /*!< LINK Enabled. */
mcm 0:5e0fa5be068d 225 LINK_Disabled = 0 /*!< LINK Disabled */
mcm 0:5e0fa5be068d 226 } AXDL345_power_ctl_link_t;
mcm 0:5e0fa5be068d 227
mcm 0:5e0fa5be068d 228 /* Bit 4 : AUTO_SLEEP ( D4 ). */
mcm 0:5e0fa5be068d 229 typedef enum {
mcm 0:5e0fa5be068d 230 AUTO_SLEEP_Enabled = 1, /*!< AUTO_SLEEP Enabled. */
mcm 0:5e0fa5be068d 231 AUTO_SLEEP_Disabled = 0 /*!< AUTO_SLEEP Disabled */
mcm 0:5e0fa5be068d 232 } AXDL345_power_ctl_auto_sleep_t;
mcm 0:5e0fa5be068d 233
mcm 0:5e0fa5be068d 234 /* Bit 3 : MEASURE ( D3 ). */
mcm 0:5e0fa5be068d 235 typedef enum {
mcm 0:5e0fa5be068d 236 MEASURE_MODE = true, /*!< MEASURE Enabled. */
mcm 0:5e0fa5be068d 237 STANDBY_MODE = false /*!< MEASURE Disabled, Standby mode. */
mcm 0:5e0fa5be068d 238 } AXDL345_power_ctl_measure_t;
mcm 0:5e0fa5be068d 239
mcm 0:5e0fa5be068d 240 /* Bit 2 : SLEEP ( D2 ). */
mcm 0:5e0fa5be068d 241 typedef enum {
mcm 0:5e0fa5be068d 242 SLEEP_Enabled = 1, /*!< SLEEP Enabled. */
mcm 0:5e0fa5be068d 243 SLEEP_Disabled = 0 /*!< SLEEP Disabled */
mcm 0:5e0fa5be068d 244 } AXDL345_power_ctl_sleep_t;
mcm 0:5e0fa5be068d 245
mcm 0:5e0fa5be068d 246 /* Bit 1 - 0 : WAKEUP ( D1 - D0 ). */
mcm 0:5e0fa5be068d 247 typedef enum {
mcm 0:5e0fa5be068d 248 WAKEUP_FREQ_8HZ = 0, /*!< WAKEUP frequency 8Hz. */
mcm 0:5e0fa5be068d 249 WAKEUP_FREQ_4HZ = 1, /*!< WAKEUP frequency 4Hz. */
mcm 0:5e0fa5be068d 250 WAKEUP_FREQ_2HZ = 2, /*!< WAKEUP frequency 2Hz. */
mcm 0:5e0fa5be068d 251 WAKEUP_FREQ_1HZ = 3 /*!< WAKEUP frequency 1Hz. */
mcm 0:5e0fa5be068d 252 } AXDL345_power_ctl_wakeup_t;
mcm 0:5e0fa5be068d 253
mcm 0:5e0fa5be068d 254
mcm 0:5e0fa5be068d 255 /**
mcm 0:5e0fa5be068d 256 * @brief INT_MAP
mcm 0:5e0fa5be068d 257 */
mcm 0:5e0fa5be068d 258 /* Bit 7 - 0 : */
mcm 0:5e0fa5be068d 259 typedef enum {
mcm 0:5e0fa5be068d 260 INT_DATA_READY = 0x80, /*!< Data ready. */
mcm 0:5e0fa5be068d 261 INT_SINGLE_TAP = 0x40, /*!< single tap. */
mcm 0:5e0fa5be068d 262 INT_DOUBLE_TAP = 0x20, /*!< double tap. */
mcm 0:5e0fa5be068d 263 INT_ACTIVITY = 0x10, /*!< activity. */
mcm 0:5e0fa5be068d 264 INT_INACTIVITY = 0x08, /*!< inactivity. */
mcm 0:5e0fa5be068d 265 INT_FREE_FALL = 0x04, /*!< Free fall. */
mcm 0:5e0fa5be068d 266 INT_WATERMARK = 0x02, /*!< Watermark. */
mcm 0:5e0fa5be068d 267 INT_OVERRUN = 0x01 /*!< Overrun. */
mcm 0:5e0fa5be068d 268 } AXDL345_int_map_t;
mcm 0:5e0fa5be068d 269
mcm 0:5e0fa5be068d 270 typedef enum {
mcm 0:5e0fa5be068d 271 INT1_PIN = 0x01, /*!< PIN 1 */
mcm 0:5e0fa5be068d 272 INT2_PIN = 0x02 /*!< PIN 2 */
mcm 0:5e0fa5be068d 273 } AXDL345_int_pin_t;
mcm 0:5e0fa5be068d 274
mcm 0:5e0fa5be068d 275
mcm 0:5e0fa5be068d 276 /**
mcm 0:5e0fa5be068d 277 * @brief DATA_FORMAT
mcm 0:5e0fa5be068d 278 */
mcm 0:5e0fa5be068d 279 /* Bit 7 : SELF_TEST ( D7 ). */
mcm 0:5e0fa5be068d 280 typedef enum {
mcm 0:5e0fa5be068d 281 DATA_FORMAT_SELF_TEST_Enabled = true, /*!< SELF_TEST Enabled. */
mcm 0:5e0fa5be068d 282 DATA_FORMAT_SELF_TEST_Disabled = false /*!< SELF_TEST Disabled. */
mcm 0:5e0fa5be068d 283 } ADXL345_data_format_self_test_t;
mcm 0:5e0fa5be068d 284
mcm 0:5e0fa5be068d 285
mcm 0:5e0fa5be068d 286 /* Bit 6 : SPI ( D6 ). */
mcm 0:5e0fa5be068d 287 typedef enum {
mcm 0:5e0fa5be068d 288 DATA_FORMAT_SPI_Enabled = true, /*!< 3-wire SPI Enabled. */
mcm 0:5e0fa5be068d 289 DATA_FORMAT_SPI_Disabled = false /*!< 4-wire SPI Enabled. */
mcm 0:5e0fa5be068d 290 } ADXL345_data_format_spi_t;
mcm 0:5e0fa5be068d 291
mcm 0:5e0fa5be068d 292
mcm 0:5e0fa5be068d 293 /* Bit 5 : INT_INVERT ( D5 ). */
mcm 0:5e0fa5be068d 294 typedef enum {
mcm 0:5e0fa5be068d 295 DATA_FORMAT_INT_INVERT_Enabled = true, /*!< INT_INVERT Enabled. */
mcm 0:5e0fa5be068d 296 DATA_FORMAT_INT_INVERT_Disabled = false /*!< INT_INVERT Disabled. */
mcm 0:5e0fa5be068d 297 } ADXL345_data_format_int_invert_t;
mcm 0:5e0fa5be068d 298
mcm 0:5e0fa5be068d 299
mcm 0:5e0fa5be068d 300 /* Bit 3 : FULL_RES ( D3 ). */
mcm 0:5e0fa5be068d 301 typedef enum {
mcm 0:5e0fa5be068d 302 DATA_FORMAT_FULL_RES_Enabled = true, /*!< FULL_RES Enabled. */
mcm 0:5e0fa5be068d 303 DATA_FORMAT_FULL_RES_Disabled = false /*!< FULL_RES Disabled. */
mcm 0:5e0fa5be068d 304 } ADXL345_data_format_full_res_t;
mcm 0:5e0fa5be068d 305
mcm 0:5e0fa5be068d 306
mcm 0:5e0fa5be068d 307 /* Bit 2 : JUSTIFY ( D2 ). */
mcm 0:5e0fa5be068d 308 typedef enum {
mcm 0:5e0fa5be068d 309 DATA_FORMAT_JUSTIFY_Enabled = true, /*!< JUSTIFY Enabled. */
mcm 0:5e0fa5be068d 310 DATA_FORMAT_JUSTIFY_Disabled = false /*!< JUSTIFY Disabled. */
mcm 0:5e0fa5be068d 311 } ADXL345_data_format_justify_t;
mcm 0:5e0fa5be068d 312
mcm 0:5e0fa5be068d 313
mcm 0:5e0fa5be068d 314 /* Bit 1 - 0 : RANGE ( D1 - D0 ). */
mcm 0:5e0fa5be068d 315 typedef enum {
mcm 0:5e0fa5be068d 316 DATA_FORMAT_RANGE_2_G = 0x00, /*!< RANGE ±2g. */
mcm 0:5e0fa5be068d 317 DATA_FORMAT_RANGE_4_G = 0x01, /*!< RANGE ±4g. */
mcm 0:5e0fa5be068d 318 DATA_FORMAT_RANGE_8_G = 0x02, /*!< RANGE ±8g. */
mcm 0:5e0fa5be068d 319 DATA_FORMAT_RANGE_16_G = 0x03 /*!< RANGE ±16g. */
mcm 0:5e0fa5be068d 320 } ADXL345_data_format_range_t;
mcm 0:5e0fa5be068d 321
mcm 0:5e0fa5be068d 322
mcm 0:5e0fa5be068d 323
mcm 0:5e0fa5be068d 324 /**
mcm 0:5e0fa5be068d 325 * @brief FIFO_CTL
mcm 0:5e0fa5be068d 326 */
mcm 0:5e0fa5be068d 327 /* Bit 7 - 6 : FIFO_MODE ( D7 - D6 ). */
mcm 0:5e0fa5be068d 328 #define FIFO_CTL_FIFO_MODE_Pos 0x07 /*!< Position of FIFO_MODE field. */
mcm 0:5e0fa5be068d 329 #define FIFO_CTL_FIFO_MODE_Mask 0xC0 /*!< Bit mask of FIFO_MODE field. */
mcm 0:5e0fa5be068d 330 #define FIFO_CTL_FIFO_MODE_BYPASS 0x00 /*!< FIFO_MODE BYPASS mode. */
mcm 0:5e0fa5be068d 331 #define FIFO_CTL_FIFO_MODE_FIFO 0x01 /*!< FIFO_MODE FIFO mode. */
mcm 0:5e0fa5be068d 332 #define FIFO_CTL_FIFO_MODE_STREAM 0x02 /*!< FIFO_MODE STREAM mode. */
mcm 0:5e0fa5be068d 333 #define FIFO_CTL_FIFO_MODE_TRIGGER 0x03 /*!< FIFO_MODE TRIGGER mode. */
mcm 0:5e0fa5be068d 334
mcm 0:5e0fa5be068d 335 /* Bit 5 : TRIGGER ( D5 ). */
mcm 0:5e0fa5be068d 336 #define TRIGGER_FIFO_MODE_Pos 0x05 /*!< Position of TRIGGER field. */
mcm 0:5e0fa5be068d 337 #define TRIGGER_FIFO_MODE_Mask 0x20 /*!< Bit mask of TRIGGER field. */
mcm 0:5e0fa5be068d 338 #define TRIGGER_FIFO_MODE_Enabled 0x01 /*!< TRIGGER Enabled. */
mcm 0:5e0fa5be068d 339 #define TRIGGER_FIFO_MODE_Disabled 0x00 /*!< TRIGGER Disabled. */
mcm 0:5e0fa5be068d 340
mcm 0:5e0fa5be068d 341
mcm 0:5e0fa5be068d 342 /**
mcm 0:5e0fa5be068d 343 * @brief FIFO_STATUS
mcm 0:5e0fa5be068d 344 */
mcm 0:5e0fa5be068d 345 /* Bit 7 : FIFO_TRIG ( D7 ). */
mcm 0:5e0fa5be068d 346 #define FIFO_STATUS_FIFO_TRIG_Pos 0x07 /*!< Position of FIFO_TRIG field. */
mcm 0:5e0fa5be068d 347 #define FIFO_STATUS_FIFO_TRIG_Mask 0x80 /*!< Bit mask of FIFO_TRIG field. */
mcm 0:5e0fa5be068d 348 #define FIFO_STATUS_FIFO_TRIG_Enabled 0x01 /*!< FIFO_TRIG Enabled. */
mcm 0:5e0fa5be068d 349 #define FIFO_STATUS_FIFO_TRIG_Disabled 0x00 /*!< FIFO_TRIG Disabled. */
mcm 0:5e0fa5be068d 350
mcm 0:5e0fa5be068d 351
mcm 0:5e0fa5be068d 352
mcm 0:5e0fa5be068d 353
mcm 0:5e0fa5be068d 354 #ifndef VECTOR_STRUCT_H
mcm 0:5e0fa5be068d 355 #define VECTOR_STRUCT_H
mcm 0:5e0fa5be068d 356 typedef struct {
mcm 1:186b5a33dce3 357 int16_t XAxis; /*!< X-axis raw data */
mcm 1:186b5a33dce3 358 int16_t YAxis; /*!< Y-axis raw data */
mcm 1:186b5a33dce3 359 int16_t ZAxis; /*!< Z-axis raw data */
mcm 1:186b5a33dce3 360 } Vector_t; /*!< Struct to get the raw data */
mcm 0:5e0fa5be068d 361
mcm 0:5e0fa5be068d 362
mcm 0:5e0fa5be068d 363 typedef struct {
mcm 1:186b5a33dce3 364 float Xmg_Axis; /*!< X-axis scaled data */
mcm 1:186b5a33dce3 365 float Ymg_Axis; /*!< X-axis scaled data */
mcm 1:186b5a33dce3 366 float Zmg_Axis; /*!< X-axis scaled data */
mcm 1:186b5a33dce3 367 } Vector_f; /*!< Struct to get the scaled data */
mcm 0:5e0fa5be068d 368 #endif
mcm 0:5e0fa5be068d 369
mcm 0:5e0fa5be068d 370
mcm 0:5e0fa5be068d 371
mcm 0:5e0fa5be068d 372
mcm 0:5e0fa5be068d 373 /**
mcm 0:5e0fa5be068d 374 * @brief INTERNAL CONSTANTS
mcm 0:5e0fa5be068d 375 */
mcm 0:5e0fa5be068d 376 typedef enum {
mcm 0:5e0fa5be068d 377 ADXL345_SUCCESS = 0, /*!< The communication was fine */
mcm 0:5e0fa5be068d 378 ADXL345_FAILURE = 1, /*!< Something went wrong */
mcm 0:5e0fa5be068d 379 I2C_SUCCESS = 0 /*!< I2C communication was fine */
mcm 0:5e0fa5be068d 380 } ADXL345_status_t;
mcm 0:5e0fa5be068d 381
mcm 0:5e0fa5be068d 382
mcm 0:5e0fa5be068d 383 /** Create an ADXL345 object connected to the specified I2C pins.
mcm 0:5e0fa5be068d 384 *
mcm 0:5e0fa5be068d 385 * @param sda I2C data pin
mcm 0:5e0fa5be068d 386 * @param scl I2C clock pin
mcm 0:5e0fa5be068d 387 * @param addr I2C slave address
mcm 0:5e0fa5be068d 388 * @param freq I2C frequency in Hz.
mcm 0:5e0fa5be068d 389 */
mcm 0:5e0fa5be068d 390 ADXL345 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 0:5e0fa5be068d 391
mcm 0:5e0fa5be068d 392 /** Delete ADXL345 object.
mcm 0:5e0fa5be068d 393 */
mcm 0:5e0fa5be068d 394 ~ADXL345();
mcm 0:5e0fa5be068d 395
mcm 0:5e0fa5be068d 396
mcm 0:5e0fa5be068d 397 /** It configures the device.
mcm 0:5e0fa5be068d 398 */
mcm 0:5e0fa5be068d 399 ADXL345_status_t ADXL345_Init ( AXDL345_bw_rate_low_power_t LOWPOWER, AXDL345_bw_rate_rate_t RATE,
mcm 0:5e0fa5be068d 400 ADXL345_data_format_int_invert_t INT_INVERT, ADXL345_data_format_full_res_t FULLRESOLUTION, ADXL345_data_format_justify_t JUSTIFY,
mcm 0:5e0fa5be068d 401 ADXL345_data_format_range_t RANGE );
mcm 0:5e0fa5be068d 402
mcm 0:5e0fa5be068d 403 /** It sets the device in Standby mode or Measure mode.
mcm 0:5e0fa5be068d 404 */
mcm 0:5e0fa5be068d 405 ADXL345_status_t ADXL345_PowerMode ( AXDL345_power_ctl_measure_t MEASUREMODE );
mcm 0:5e0fa5be068d 406
mcm 0:5e0fa5be068d 407 /** It gets the device ID
mcm 0:5e0fa5be068d 408 */
mcm 0:5e0fa5be068d 409 ADXL345_status_t ADXL345_GetID ( uint8_t* myID );
mcm 0:5e0fa5be068d 410
mcm 0:5e0fa5be068d 411 /** It gets the range.
mcm 0:5e0fa5be068d 412 */
mcm 0:5e0fa5be068d 413 ADXL345_status_t ADXL345_GetRange ( ADXL345_data_format_range_t* myRANGE );
mcm 0:5e0fa5be068d 414
mcm 0:5e0fa5be068d 415 /** It sets the range.
mcm 0:5e0fa5be068d 416 */
mcm 0:5e0fa5be068d 417 ADXL345_status_t ADXL345_SetRange ( ADXL345_data_format_range_t myRANGE );
mcm 0:5e0fa5be068d 418
mcm 0:5e0fa5be068d 419 /** It gets the rate.
mcm 0:5e0fa5be068d 420 */
mcm 0:5e0fa5be068d 421 ADXL345_status_t ADXL345_GetRate ( AXDL345_bw_rate_rate_t* myRATE );
mcm 0:5e0fa5be068d 422
mcm 0:5e0fa5be068d 423 /** It sets the rate.
mcm 0:5e0fa5be068d 424 */
mcm 0:5e0fa5be068d 425 ADXL345_status_t ADXL345_SetRate ( AXDL345_bw_rate_rate_t myRATE );
mcm 0:5e0fa5be068d 426
mcm 0:5e0fa5be068d 427 /** It reads the raw data.
mcm 0:5e0fa5be068d 428 */
mcm 0:5e0fa5be068d 429 ADXL345_status_t ADXL345_ReadRawData ( Vector_t* myXYZVector );
mcm 0:5e0fa5be068d 430
mcm 0:5e0fa5be068d 431 /** It reads the scaled data.
mcm 0:5e0fa5be068d 432 */
mcm 0:5e0fa5be068d 433 ADXL345_status_t ADXL345_ReadScaledData ( Vector_f* myScaled_XYZVector );
mcm 0:5e0fa5be068d 434
mcm 0:5e0fa5be068d 435 /** It sets the free fall threshold.
mcm 0:5e0fa5be068d 436 */
mcm 0:5e0fa5be068d 437 ADXL345_status_t ADXL345_SetFreeFallThreshold ( uint8_t myThreshold );
mcm 0:5e0fa5be068d 438
mcm 0:5e0fa5be068d 439 /** It sets the free fall duration.
mcm 0:5e0fa5be068d 440 */
mcm 0:5e0fa5be068d 441 ADXL345_status_t ADXL345_SetFreeFallDuration ( uint8_t myDuration );
mcm 0:5e0fa5be068d 442
mcm 0:5e0fa5be068d 443 /** It sets the tap threshold.
mcm 0:5e0fa5be068d 444 */
mcm 0:5e0fa5be068d 445 ADXL345_status_t ADXL345_SetTapThreshold ( uint8_t myThreshold );
mcm 0:5e0fa5be068d 446
mcm 0:5e0fa5be068d 447 /** It sets the tap duration.
mcm 0:5e0fa5be068d 448 */
mcm 0:5e0fa5be068d 449 ADXL345_status_t ADXL345_SetTapDuration ( uint8_t myDuration );
mcm 0:5e0fa5be068d 450
mcm 0:5e0fa5be068d 451 /** It sets the douvble tap latency.
mcm 0:5e0fa5be068d 452 */
mcm 0:5e0fa5be068d 453 ADXL345_status_t ADXL345_SetDoubleTapLatency ( uint8_t myLatency );
mcm 0:5e0fa5be068d 454
mcm 0:5e0fa5be068d 455 /** It sets the double tap window.
mcm 0:5e0fa5be068d 456 */
mcm 0:5e0fa5be068d 457 ADXL345_status_t ADXL345_SetDoubleTapWindow ( uint8_t myWindow );
mcm 0:5e0fa5be068d 458
mcm 0:5e0fa5be068d 459 /** It sets the tap axis.
mcm 0:5e0fa5be068d 460 */
mcm 0:5e0fa5be068d 461 ADXL345_status_t ADXL345_SetTap_Axis ( ADXL345_tap_axes_axis_t myAxisEnabled );
mcm 0:5e0fa5be068d 462
mcm 0:5e0fa5be068d 463 /** It sets the suppress for double tap.
mcm 0:5e0fa5be068d 464 */
mcm 0:5e0fa5be068d 465 ADXL345_status_t ADXL345_SetDouble_Suppress ( ADXL345_tap_axes_suppress_t mySuppressEnabled );
mcm 0:5e0fa5be068d 466
mcm 0:5e0fa5be068d 467 /** It sets the activity threshold.
mcm 0:5e0fa5be068d 468 */
mcm 0:5e0fa5be068d 469 ADXL345_status_t ADXL345_SetActivityThreshold ( uint8_t myActivityThreshold );
mcm 0:5e0fa5be068d 470
mcm 0:5e0fa5be068d 471 /** It sets the activity AC or DC coupled.
mcm 0:5e0fa5be068d 472 */
mcm 0:5e0fa5be068d 473 ADXL345_status_t ADXL345_SetActivity_AC_DC_Coupled ( ADXL345_act_inact_ctl_activity_dc_coupled_t myDC_Coupled );
mcm 0:5e0fa5be068d 474
mcm 0:5e0fa5be068d 475 /** It sets the activity axis.
mcm 0:5e0fa5be068d 476 */
mcm 0:5e0fa5be068d 477 ADXL345_status_t ADXL345_SetActivity_Axis ( ADXL345_act_inact_ctl_activity_axis_t myAxisEnabled );
mcm 0:5e0fa5be068d 478
mcm 0:5e0fa5be068d 479 /** It reads the ACT_TAP status register.
mcm 0:5e0fa5be068d 480 */
mcm 0:5e0fa5be068d 481 ADXL345_status_t ADXL345_Read_ACT_TAP_STATUS ( uint8_t* myACT_TAP_STATUS );
mcm 0:5e0fa5be068d 482
mcm 0:5e0fa5be068d 483 /** It sets the inactivity threshold.
mcm 0:5e0fa5be068d 484 */
mcm 0:5e0fa5be068d 485 ADXL345_status_t ADXL345_SetInactivityThreshold ( uint8_t myInactivityThreshold );
mcm 0:5e0fa5be068d 486
mcm 0:5e0fa5be068d 487 /** It sets the inactivity time.
mcm 0:5e0fa5be068d 488 */
mcm 0:5e0fa5be068d 489 ADXL345_status_t ADXL345_SetTimeInactivity ( uint8_t myTimeInactivity );
mcm 0:5e0fa5be068d 490
mcm 0:5e0fa5be068d 491 /** It sets the inactivity AC or DC coupled.
mcm 0:5e0fa5be068d 492 */
mcm 0:5e0fa5be068d 493 ADXL345_status_t ADXL345_SetInactivity_AC_DC_Coupled ( ADXL345_act_inact_ctl_inactivity_dc_coupled_t myDC_Coupled );
mcm 0:5e0fa5be068d 494
mcm 0:5e0fa5be068d 495 /** It sets the inactivity axis.
mcm 0:5e0fa5be068d 496 */
mcm 0:5e0fa5be068d 497 ADXL345_status_t ADXL345_SetInactivity_Axis ( ADXL345_act_inact_ctl_inactivity_axis_t myAxisEnabled );
mcm 0:5e0fa5be068d 498
mcm 0:5e0fa5be068d 499 /** It sets the interrupt map.
mcm 0:5e0fa5be068d 500 */
mcm 0:5e0fa5be068d 501 ADXL345_status_t ADXL345_SetInterruptsMap ( AXDL345_int_map_t myInterruptsMap, AXDL345_int_pin_t myInterruptPin );
mcm 0:5e0fa5be068d 502
mcm 0:5e0fa5be068d 503 /** It enables the interrupts.
mcm 0:5e0fa5be068d 504 */
mcm 0:5e0fa5be068d 505 ADXL345_status_t ADXL345_EnableInterrupts ( AXDL345_int_map_t myInterruptsEnabled );
mcm 0:5e0fa5be068d 506
mcm 0:5e0fa5be068d 507 /** It reads the interrupt sources.
mcm 0:5e0fa5be068d 508 */
mcm 0:5e0fa5be068d 509 ADXL345_status_t ADXL345_ReadInterruptSource ( uint8_t* myIntSource );
mcm 0:5e0fa5be068d 510
mcm 0:5e0fa5be068d 511
mcm 0:5e0fa5be068d 512 private:
mcm 0:5e0fa5be068d 513 I2C i2c;
mcm 0:5e0fa5be068d 514 uint32_t ADXL345_Addr;
mcm 0:5e0fa5be068d 515 };
mcm 0:5e0fa5be068d 516
mcm 0:5e0fa5be068d 517 #endif