Manuel Caballero / ADXL345
Committer:
mcm
Date:
Sat Aug 19 08:13:41 2017 +0000
Revision:
0:5e0fa5be068d
Child:
1:186b5a33dce3
ADXL345 library has just been started. Both the header and the function files were created.

Who changed what in which revision?

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