This library enables users to communicate with the ADXL345 accelerometer through the I2C bus on the mbed. The API names are similar and work nearly the same way as those made in the SPI libraries for the ADXL345.

Dependencies:   mbed

Committer:
RobotManYt
Date:
Fri May 24 14:36:05 2019 +0000
Revision:
3:d030b74d1d71
Parent:
1:d9412b56f98a
l;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
peterswanson87 0:d0adb548714f 1 /**
peterswanson87 0:d0adb548714f 2 * @author Peter Swanson
peterswanson87 0:d0adb548714f 3 * A personal note from me: Jesus Christ has changed my life so much it blows my mind. I say this because
peterswanson87 0:d0adb548714f 4 * today, religion is thought of as something that you do or believe and has about as
peterswanson87 0:d0adb548714f 5 * little impact on a person as their political stance. But for me, God gives me daily
peterswanson87 0:d0adb548714f 6 * strength and has filled my life with the satisfaction that I could never find in any
peterswanson87 0:d0adb548714f 7 * of the other things that I once looked for it in.
peterswanson87 0:d0adb548714f 8 * If your interested, heres verse that changed my life:
peterswanson87 0:d0adb548714f 9 * Rom 8:1-3: "Therefore, there is now no condemnation for those who are in Christ Jesus,
peterswanson87 0:d0adb548714f 10 * because through Christ Jesus, the law of the Spirit who gives life has set
peterswanson87 0:d0adb548714f 11 * me free from the law of sin (which brings...) and death. For what the law
peterswanson87 0:d0adb548714f 12 * was powerless to do in that it was weakened by the flesh, God did by sending
peterswanson87 0:d0adb548714f 13 * His own Son in the likeness of sinful flesh to be a sin offering. And so He
peterswanson87 0:d0adb548714f 14 * condemned sin in the flesh in order that the righteous requirements of the
peterswanson87 0:d0adb548714f 15 * (God's) law might be fully met in us, who live not according to the flesh
peterswanson87 0:d0adb548714f 16 * but according to the Spirit."
peterswanson87 0:d0adb548714f 17 *
peterswanson87 1:d9412b56f98a 18 * A special thanks to Ewout van Bekkum for all his patient help in developing this library!
peterswanson87 1:d9412b56f98a 19 *
peterswanson87 0:d0adb548714f 20 * @section LICENSE
peterswanson87 0:d0adb548714f 21 *
peterswanson87 0:d0adb548714f 22 * Permission is hereby granted, free of charge, to any person obtaining a copy
peterswanson87 0:d0adb548714f 23 * of this software and associated documentation files (the "Software"), to deal
peterswanson87 0:d0adb548714f 24 * in the Software without restriction, including without limitation the rights
peterswanson87 0:d0adb548714f 25 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
peterswanson87 0:d0adb548714f 26 * copies of the Software, and to permit persons to whom the Software is
peterswanson87 0:d0adb548714f 27 * furnished to do so, subject to the following conditions:
peterswanson87 0:d0adb548714f 28 *
peterswanson87 0:d0adb548714f 29 * The above copyright notice and this permission notice shall be included in
peterswanson87 0:d0adb548714f 30 * all copies or substantial portions of the Software.
peterswanson87 0:d0adb548714f 31 *
peterswanson87 0:d0adb548714f 32 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
peterswanson87 0:d0adb548714f 33 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
peterswanson87 0:d0adb548714f 34 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
peterswanson87 0:d0adb548714f 35 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
peterswanson87 0:d0adb548714f 36 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
peterswanson87 0:d0adb548714f 37 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
peterswanson87 0:d0adb548714f 38 * THE SOFTWARE.
peterswanson87 0:d0adb548714f 39 *
peterswanson87 0:d0adb548714f 40 * @section DESCRIPTION
peterswanson87 0:d0adb548714f 41 *
peterswanson87 0:d0adb548714f 42 * ADXL345, triple axis, I2C interface, accelerometer.
peterswanson87 0:d0adb548714f 43 *
peterswanson87 0:d0adb548714f 44 * Datasheet:
peterswanson87 0:d0adb548714f 45 *
peterswanson87 0:d0adb548714f 46 * http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf
peterswanson87 0:d0adb548714f 47 */
peterswanson87 0:d0adb548714f 48
peterswanson87 0:d0adb548714f 49
peterswanson87 0:d0adb548714f 50
peterswanson87 0:d0adb548714f 51 #ifndef ADXL345_I2C_H
peterswanson87 0:d0adb548714f 52 #define ADXL345_I2C_H
peterswanson87 0:d0adb548714f 53
peterswanson87 0:d0adb548714f 54 /**
peterswanson87 0:d0adb548714f 55 * Includes
peterswanson87 0:d0adb548714f 56 */
peterswanson87 0:d0adb548714f 57 #include "mbed.h"
RobotManYt 3:d030b74d1d71 58 #include "math.h"
RobotManYt 3:d030b74d1d71 59 #include "string"
RobotManYt 3:d030b74d1d71 60 #include "sstream"
peterswanson87 0:d0adb548714f 61
peterswanson87 0:d0adb548714f 62 /**
peterswanson87 0:d0adb548714f 63 * Defines
peterswanson87 0:d0adb548714f 64 */
peterswanson87 0:d0adb548714f 65 //Registers.
peterswanson87 0:d0adb548714f 66 #define ADXL345_DEVID_REG 0x00
peterswanson87 0:d0adb548714f 67 #define ADXL345_THRESH_TAP_REG 0x1D
peterswanson87 0:d0adb548714f 68 #define ADXL345_OFSX_REG 0x1E
peterswanson87 0:d0adb548714f 69 #define ADXL345_OFSY_REG 0x1F
peterswanson87 0:d0adb548714f 70 #define ADXL345_OFSZ_REG 0x20
peterswanson87 0:d0adb548714f 71 #define ADXL345_DUR_REG 0x21
peterswanson87 0:d0adb548714f 72 #define ADXL345_LATENT_REG 0x22
peterswanson87 0:d0adb548714f 73 #define ADXL345_WINDOW_REG 0x23
peterswanson87 0:d0adb548714f 74 #define ADXL345_THRESH_ACT_REG 0x24
peterswanson87 0:d0adb548714f 75 #define ADXL345_THRESH_INACT_REG 0x25
peterswanson87 0:d0adb548714f 76 #define ADXL345_TIME_INACT_REG 0x26
peterswanson87 0:d0adb548714f 77 #define ADXL345_ACT_INACT_CTL_REG 0x27
peterswanson87 0:d0adb548714f 78 #define ADXL345_THRESH_FF_REG 0x28
peterswanson87 0:d0adb548714f 79 #define ADXL345_TIME_FF_REG 0x29
peterswanson87 0:d0adb548714f 80 #define ADXL345_TAP_AXES_REG 0x2A
peterswanson87 0:d0adb548714f 81 #define ADXL345_ACT_TAP_STATUS_REG 0x2B
peterswanson87 0:d0adb548714f 82 #define ADXL345_BW_RATE_REG 0x2C
peterswanson87 0:d0adb548714f 83 #define ADXL345_POWER_CTL_REG 0x2D
peterswanson87 0:d0adb548714f 84 #define ADXL345_INT_ENABLE_REG 0x2E
peterswanson87 0:d0adb548714f 85 #define ADXL345_INT_MAP_REG 0x2F
peterswanson87 0:d0adb548714f 86 #define ADXL345_INT_SOURCE_REG 0x30
peterswanson87 0:d0adb548714f 87 #define ADXL345_DATA_FORMAT_REG 0x31
peterswanson87 0:d0adb548714f 88 #define ADXL345_DATAX0_REG 0x32
peterswanson87 0:d0adb548714f 89 #define ADXL345_DATAX1_REG 0x33
peterswanson87 0:d0adb548714f 90 #define ADXL345_DATAY0_REG 0x34
peterswanson87 0:d0adb548714f 91 #define ADXL345_DATAY1_REG 0x35
peterswanson87 0:d0adb548714f 92 #define ADXL345_DATAZ0_REG 0x36
peterswanson87 0:d0adb548714f 93 #define ADXL345_DATAZ1_REG 0x37
peterswanson87 0:d0adb548714f 94 #define ADXL345_FIFO_CTL 0x38
peterswanson87 0:d0adb548714f 95 #define ADXL345_FIFO_STATUS 0x39
peterswanson87 0:d0adb548714f 96
peterswanson87 0:d0adb548714f 97 //Data rate codes.
peterswanson87 0:d0adb548714f 98 #define ADXL345_3200HZ 0x0F
peterswanson87 0:d0adb548714f 99 #define ADXL345_1600HZ 0x0E
peterswanson87 0:d0adb548714f 100 #define ADXL345_800HZ 0x0D
peterswanson87 0:d0adb548714f 101 #define ADXL345_400HZ 0x0C
peterswanson87 0:d0adb548714f 102 #define ADXL345_200HZ 0x0B
peterswanson87 0:d0adb548714f 103 #define ADXL345_100HZ 0x0A
peterswanson87 0:d0adb548714f 104 #define ADXL345_50HZ 0x09
peterswanson87 0:d0adb548714f 105 #define ADXL345_25HZ 0x08
peterswanson87 0:d0adb548714f 106 #define ADXL345_12HZ5 0x07
peterswanson87 0:d0adb548714f 107 #define ADXL345_6HZ25 0x06
peterswanson87 0:d0adb548714f 108
peterswanson87 0:d0adb548714f 109 // read or write bytes
peterswanson87 0:d0adb548714f 110 #define ADXL345_I2C_READ 0xA7
peterswanson87 0:d0adb548714f 111 #define ADXL345_I2C_WRITE 0xA6
peterswanson87 0:d0adb548714f 112 #define ADXL345_I2C_ADDRESS 0x53 //the ADXL345 7-bit address is 0x53 when ALT ADDRESS is low as it is on the sparkfun chip: when ALT ADDRESS is high the address is 0x1D
peterswanson87 0:d0adb548714f 113
peterswanson87 0:d0adb548714f 114 /////////////when ALT ADDRESS pin is high:
peterswanson87 0:d0adb548714f 115 //#define ADXL345_I2C_READ 0x3B
peterswanson87 0:d0adb548714f 116 //#define ADXL345_I2C_WRITE 0x3A
peterswanson87 0:d0adb548714f 117 //#define ADXL345_I2C_ADDRESS 0x1D
peterswanson87 0:d0adb548714f 118
peterswanson87 0:d0adb548714f 119 #define ADXL345_X 0x00
peterswanson87 0:d0adb548714f 120 #define ADXL345_Y 0x01
peterswanson87 0:d0adb548714f 121 #define ADXL345_Z 0x02
peterswanson87 0:d0adb548714f 122
peterswanson87 0:d0adb548714f 123
peterswanson87 0:d0adb548714f 124
peterswanson87 0:d0adb548714f 125 // modes
peterswanson87 0:d0adb548714f 126 #define MeasurementMode 0x08
peterswanson87 0:d0adb548714f 127
peterswanson87 0:d0adb548714f 128
peterswanson87 0:d0adb548714f 129
peterswanson87 0:d0adb548714f 130
RobotManYt 3:d030b74d1d71 131 #define EEPROM_READ 0xA6
RobotManYt 3:d030b74d1d71 132 #define EEPROM_WRITE 0XA7
RobotManYt 3:d030b74d1d71 133
RobotManYt 3:d030b74d1d71 134 #define LCD 0x50
RobotManYt 3:d030b74d1d71 135 #define LCD_ON 0x41
RobotManYt 3:d030b74d1d71 136 #define LCD_OFF 0x42
RobotManYt 3:d030b74d1d71 137 #define LCD_CURSOR 0X45
RobotManYt 3:d030b74d1d71 138 #define LCD_CLEAR 0x51
RobotManYt 3:d030b74d1d71 139 #define LCD_CMD 0xFE
RobotManYt 3:d030b74d1d71 140
RobotManYt 3:d030b74d1d71 141
peterswanson87 0:d0adb548714f 142
peterswanson87 0:d0adb548714f 143
peterswanson87 0:d0adb548714f 144
peterswanson87 0:d0adb548714f 145 class ADXL345_I2C {
peterswanson87 0:d0adb548714f 146
peterswanson87 0:d0adb548714f 147 public:
peterswanson87 0:d0adb548714f 148
peterswanson87 0:d0adb548714f 149 /**
peterswanson87 0:d0adb548714f 150 * Constructor.
peterswanson87 0:d0adb548714f 151 *
peterswanson87 0:d0adb548714f 152 * @param mosi mbed pin to use for SDA line of I2C interface.
peterswanson87 0:d0adb548714f 153 * @param sck mbed pin to use for SCL line of I2C interface.
peterswanson87 0:d0adb548714f 154 */
peterswanson87 0:d0adb548714f 155 ADXL345_I2C(PinName sda, PinName scl);
peterswanson87 0:d0adb548714f 156
peterswanson87 0:d0adb548714f 157 /**
peterswanson87 0:d0adb548714f 158 * Get the output of all three axes.
peterswanson87 0:d0adb548714f 159 *
peterswanson87 0:d0adb548714f 160 * @param Pointer to a buffer to hold the accelerometer value for the
peterswanson87 0:d0adb548714f 161 * x-axis, y-axis and z-axis [in that order].
peterswanson87 0:d0adb548714f 162 */
peterswanson87 0:d0adb548714f 163 void getOutput(int* readings);
peterswanson87 0:d0adb548714f 164
RobotManYt 3:d030b74d1d71 165 void writeEEPROM(char *data, uint8_t lenght);
RobotManYt 3:d030b74d1d71 166
RobotManYt 3:d030b74d1d71 167 //LCD
RobotManYt 3:d030b74d1d71 168 void LCDprint(float Xaxes, float Yaxes, float Zaxes);
RobotManYt 3:d030b74d1d71 169
peterswanson87 0:d0adb548714f 170 /**
peterswanson87 0:d0adb548714f 171 * Read the device ID register on the device.
peterswanson87 0:d0adb548714f 172 *
peterswanson87 0:d0adb548714f 173 * @return The device ID code [0xE5]
peterswanson87 0:d0adb548714f 174 */
peterswanson87 0:d0adb548714f 175 char getDeviceID(void);
peterswanson87 0:d0adb548714f 176
peterswanson87 0:d0adb548714f 177
peterswanson87 0:d0adb548714f 178
peterswanson87 0:d0adb548714f 179 /**
peterswanson87 0:d0adb548714f 180 * Set the power mode.
peterswanson87 0:d0adb548714f 181 *
peterswanson87 0:d0adb548714f 182 * @param mode 0 -> Normal operation.
peterswanson87 0:d0adb548714f 183 * 1 -> Reduced power operation.
peterswanson87 0:d0adb548714f 184 */
peterswanson87 0:d0adb548714f 185 int setPowerMode(char mode);
peterswanson87 0:d0adb548714f 186
peterswanson87 0:d0adb548714f 187 /**
peterswanson87 0:d0adb548714f 188 * Set the power control settings.
peterswanson87 0:d0adb548714f 189 *
peterswanson87 0:d0adb548714f 190 * See datasheet for details.
peterswanson87 0:d0adb548714f 191 *
peterswanson87 0:d0adb548714f 192 * @param The control byte to write to the POWER_CTL register.
peterswanson87 0:d0adb548714f 193 */
peterswanson87 0:d0adb548714f 194 int setPowerControl(char settings);
peterswanson87 0:d0adb548714f 195 /**
peterswanson87 0:d0adb548714f 196 * Get the power control settings.
peterswanson87 0:d0adb548714f 197 *
peterswanson87 0:d0adb548714f 198 * See datasheet for details.
peterswanson87 0:d0adb548714f 199 *
peterswanson87 0:d0adb548714f 200 * @return The contents of the POWER_CTL register.
peterswanson87 0:d0adb548714f 201 */
peterswanson87 0:d0adb548714f 202 char getPowerControl(void);
peterswanson87 0:d0adb548714f 203
peterswanson87 0:d0adb548714f 204
peterswanson87 0:d0adb548714f 205 /**
peterswanson87 0:d0adb548714f 206 * Get the data format settings.
peterswanson87 0:d0adb548714f 207 *
peterswanson87 0:d0adb548714f 208 * @return The contents of the DATA_FORMAT register.
peterswanson87 0:d0adb548714f 209 */
peterswanson87 0:d0adb548714f 210
peterswanson87 0:d0adb548714f 211 char getDataFormatControl(void);
peterswanson87 0:d0adb548714f 212
peterswanson87 0:d0adb548714f 213 /**
peterswanson87 0:d0adb548714f 214 * Set the data format settings.
peterswanson87 0:d0adb548714f 215 *
peterswanson87 0:d0adb548714f 216 * @param settings The control byte to write to the DATA_FORMAT register.
peterswanson87 0:d0adb548714f 217 */
peterswanson87 0:d0adb548714f 218 int setDataFormatControl(char settings);
peterswanson87 0:d0adb548714f 219
peterswanson87 0:d0adb548714f 220 /**
peterswanson87 0:d0adb548714f 221 * Set the data rate.
peterswanson87 0:d0adb548714f 222 *
peterswanson87 0:d0adb548714f 223 * @param rate The rate code (see #defines or datasheet).
peterswanson87 0:d0adb548714f 224 */
peterswanson87 0:d0adb548714f 225 int setDataRate(char rate);
peterswanson87 0:d0adb548714f 226
peterswanson87 0:d0adb548714f 227
peterswanson87 0:d0adb548714f 228 /**
peterswanson87 0:d0adb548714f 229 * Get the current offset for a particular axis.
peterswanson87 0:d0adb548714f 230 *
peterswanson87 0:d0adb548714f 231 * @param axis 0x00 -> X-axis
peterswanson87 0:d0adb548714f 232 * 0x01 -> Y-axis
peterswanson87 0:d0adb548714f 233 * 0x02 -> Z-axis
peterswanson87 0:d0adb548714f 234 * @return The current offset as an 8-bit 2's complement number with scale
peterswanson87 0:d0adb548714f 235 * factor 15.6mg/LSB.
peterswanson87 0:d0adb548714f 236 */
peterswanson87 0:d0adb548714f 237
peterswanson87 0:d0adb548714f 238 char getOffset(char axis);
peterswanson87 0:d0adb548714f 239
peterswanson87 0:d0adb548714f 240 /**
peterswanson87 0:d0adb548714f 241 * Set the offset for a particular axis.
peterswanson87 0:d0adb548714f 242 *
peterswanson87 0:d0adb548714f 243 * @param axis 0x00 -> X-axis
peterswanson87 0:d0adb548714f 244 * 0x01 -> Y-axis
peterswanson87 0:d0adb548714f 245 * 0x02 -> Z-axis
peterswanson87 0:d0adb548714f 246 * @param offset The offset as an 8-bit 2's complement number with scale
peterswanson87 0:d0adb548714f 247 * factor 15.6mg/LSB.
peterswanson87 0:d0adb548714f 248 */
peterswanson87 0:d0adb548714f 249 int setOffset(char axis, char offset);
peterswanson87 0:d0adb548714f 250
peterswanson87 0:d0adb548714f 251
peterswanson87 0:d0adb548714f 252
peterswanson87 0:d0adb548714f 253 /**
peterswanson87 0:d0adb548714f 254 * Get the FIFO control settings.
peterswanson87 0:d0adb548714f 255 *
peterswanson87 0:d0adb548714f 256 * @return The contents of the FIFO_CTL register.
peterswanson87 0:d0adb548714f 257 */
peterswanson87 0:d0adb548714f 258 char getFifoControl(void);
peterswanson87 0:d0adb548714f 259
peterswanson87 0:d0adb548714f 260 /**
peterswanson87 0:d0adb548714f 261 * Set the FIFO control settings.
peterswanson87 0:d0adb548714f 262 *
peterswanson87 0:d0adb548714f 263 * @param The control byte to write to the FIFO_CTL register.
peterswanson87 0:d0adb548714f 264 */
peterswanson87 0:d0adb548714f 265 int setFifoControl(char settings);
peterswanson87 0:d0adb548714f 266
peterswanson87 0:d0adb548714f 267 /**
peterswanson87 0:d0adb548714f 268 * Get FIFO status.
peterswanson87 0:d0adb548714f 269 *
peterswanson87 0:d0adb548714f 270 * @return The contents of the FIFO_STATUS register.
peterswanson87 0:d0adb548714f 271 */
peterswanson87 0:d0adb548714f 272 char getFifoStatus(void);
peterswanson87 0:d0adb548714f 273
peterswanson87 0:d0adb548714f 274 /**
peterswanson87 0:d0adb548714f 275 * Read the tap threshold on the device.
peterswanson87 0:d0adb548714f 276 *
peterswanson87 0:d0adb548714f 277 * @return The tap threshold as an 8-bit number with a scale factor of
peterswanson87 0:d0adb548714f 278 * 62.5mg/LSB.
peterswanson87 0:d0adb548714f 279 */
peterswanson87 0:d0adb548714f 280 char getTapThreshold(void);
peterswanson87 0:d0adb548714f 281
peterswanson87 0:d0adb548714f 282 /**
peterswanson87 0:d0adb548714f 283 * Set the tap threshold.
peterswanson87 0:d0adb548714f 284 *
peterswanson87 0:d0adb548714f 285 * @param The tap threshold as an 8-bit number with a scale factor of
peterswanson87 0:d0adb548714f 286 * 62.5mg/LSB.
peterswanson87 0:d0adb548714f 287 */
peterswanson87 0:d0adb548714f 288 int setTapThreshold(char threshold);
peterswanson87 0:d0adb548714f 289
peterswanson87 0:d0adb548714f 290 /**
peterswanson87 0:d0adb548714f 291 * Get the tap duration required to trigger an event.
peterswanson87 0:d0adb548714f 292 *
peterswanson87 0:d0adb548714f 293 * @return The max time that an event must be above the tap threshold to
peterswanson87 0:d0adb548714f 294 * qualify as a tap event, in microseconds.
peterswanson87 0:d0adb548714f 295 */
peterswanson87 0:d0adb548714f 296 float getTapDuration(void);
peterswanson87 0:d0adb548714f 297
peterswanson87 0:d0adb548714f 298 /**
peterswanson87 0:d0adb548714f 299 * Set the tap duration required to trigger an event.
peterswanson87 0:d0adb548714f 300 *
peterswanson87 0:d0adb548714f 301 * @param duration_us The max time that an event must be above the tap
peterswanson87 0:d0adb548714f 302 * threshold to qualify as a tap event, in microseconds.
peterswanson87 0:d0adb548714f 303 * Time will be normalized by the scale factor which is
peterswanson87 0:d0adb548714f 304 * 625us/LSB. A value of 0 disables the single/double
peterswanson87 0:d0adb548714f 305 * tap functions.
peterswanson87 0:d0adb548714f 306 */
peterswanson87 0:d0adb548714f 307 int setTapDuration(short int duration_us);
peterswanson87 0:d0adb548714f 308
peterswanson87 0:d0adb548714f 309 /**
peterswanson87 0:d0adb548714f 310 * Get the tap latency between the detection of a tap and the time window.
peterswanson87 0:d0adb548714f 311 *
peterswanson87 0:d0adb548714f 312 * @return The wait time from the detection of a tap event to the start of
peterswanson87 0:d0adb548714f 313 * the time window during which a possible second tap event can be
peterswanson87 0:d0adb548714f 314 * detected in milliseconds.
peterswanson87 0:d0adb548714f 315 */
peterswanson87 0:d0adb548714f 316 float getTapLatency(void);
peterswanson87 0:d0adb548714f 317
peterswanson87 0:d0adb548714f 318 /**
peterswanson87 0:d0adb548714f 319 * Set the tap latency between the detection of a tap and the time window.
peterswanson87 0:d0adb548714f 320 *
peterswanson87 0:d0adb548714f 321 * @param latency_ms The wait time from the detection of a tap event to the
peterswanson87 0:d0adb548714f 322 * start of the time window during which a possible
peterswanson87 0:d0adb548714f 323 * second tap event can be detected in milliseconds.
peterswanson87 0:d0adb548714f 324 * A value of 0 disables the double tap function.
peterswanson87 0:d0adb548714f 325 */
peterswanson87 0:d0adb548714f 326 int setTapLatency(short int latency_ms);
peterswanson87 0:d0adb548714f 327
peterswanson87 0:d0adb548714f 328 /**
peterswanson87 0:d0adb548714f 329 * Get the time of window between tap latency and a double tap.
peterswanson87 0:d0adb548714f 330 *
peterswanson87 0:d0adb548714f 331 * @return The amount of time after the expiration of the latency time
peterswanson87 0:d0adb548714f 332 * during which a second valid tap can begin, in milliseconds.
peterswanson87 0:d0adb548714f 333 */
peterswanson87 0:d0adb548714f 334 float getWindowTime(void);
peterswanson87 0:d0adb548714f 335
peterswanson87 0:d0adb548714f 336 /**
peterswanson87 0:d0adb548714f 337 * Set the time of the window between tap latency and a double tap.
peterswanson87 0:d0adb548714f 338 *
peterswanson87 0:d0adb548714f 339 * @param window_ms The amount of time after the expiration of the latency
peterswanson87 0:d0adb548714f 340 * time during which a second valid tap can begin,
peterswanson87 0:d0adb548714f 341 * in milliseconds.
peterswanson87 0:d0adb548714f 342 */
peterswanson87 0:d0adb548714f 343 int setWindowTime(short int window_ms);
peterswanson87 0:d0adb548714f 344
peterswanson87 0:d0adb548714f 345 /**
peterswanson87 0:d0adb548714f 346 * Get the threshold value for detecting activity.
peterswanson87 0:d0adb548714f 347 *
peterswanson87 0:d0adb548714f 348 * @return The threshold value for detecting activity as an 8-bit number.
peterswanson87 0:d0adb548714f 349 * Scale factor is 62.5mg/LSB.
peterswanson87 0:d0adb548714f 350 */
peterswanson87 0:d0adb548714f 351 char getActivityThreshold(void);
peterswanson87 0:d0adb548714f 352
peterswanson87 0:d0adb548714f 353 /**
peterswanson87 0:d0adb548714f 354 * Set the threshold value for detecting activity.
peterswanson87 0:d0adb548714f 355 *
peterswanson87 0:d0adb548714f 356 * @param threshold The threshold value for detecting activity as an 8-bit
peterswanson87 0:d0adb548714f 357 * number. Scale factor is 62.5mg/LSB. A value of 0 may
peterswanson87 0:d0adb548714f 358 * result in undesirable behavior if the activity
peterswanson87 0:d0adb548714f 359 * interrupt is enabled.
peterswanson87 0:d0adb548714f 360 */
peterswanson87 0:d0adb548714f 361 int setActivityThreshold(char threshold);
peterswanson87 0:d0adb548714f 362
peterswanson87 0:d0adb548714f 363 /**
peterswanson87 0:d0adb548714f 364 * Get the threshold value for detecting inactivity.
peterswanson87 0:d0adb548714f 365 *
peterswanson87 0:d0adb548714f 366 * @return The threshold value for detecting inactivity as an 8-bit number.
peterswanson87 0:d0adb548714f 367 * Scale factor is 62.5mg/LSB.
peterswanson87 0:d0adb548714f 368 */
peterswanson87 0:d0adb548714f 369 char getInactivityThreshold(void);
peterswanson87 0:d0adb548714f 370
peterswanson87 0:d0adb548714f 371 /**
peterswanson87 0:d0adb548714f 372 * Set the threshold value for detecting inactivity.
peterswanson87 0:d0adb548714f 373 *
peterswanson87 0:d0adb548714f 374 * @param threshold The threshold value for detecting inactivity as an
peterswanson87 0:d0adb548714f 375 * 8-bit number. Scale factor is 62.5mg/LSB.
peterswanson87 0:d0adb548714f 376 */
peterswanson87 0:d0adb548714f 377 int setInactivityThreshold(char threshold);
peterswanson87 0:d0adb548714f 378
peterswanson87 0:d0adb548714f 379 /**
peterswanson87 0:d0adb548714f 380 * Get the time required for inactivity to be declared.
peterswanson87 0:d0adb548714f 381 *
peterswanson87 0:d0adb548714f 382 * @return The amount of time that acceleration must be less than the
peterswanson87 0:d0adb548714f 383 * inactivity threshold for inactivity to be declared, in
peterswanson87 0:d0adb548714f 384 * seconds.
peterswanson87 0:d0adb548714f 385 */
peterswanson87 0:d0adb548714f 386 char getTimeInactivity(void);
peterswanson87 0:d0adb548714f 387
peterswanson87 0:d0adb548714f 388 /**
peterswanson87 0:d0adb548714f 389 * Set the time required for inactivity to be declared.
peterswanson87 0:d0adb548714f 390 *
peterswanson87 0:d0adb548714f 391 * @param inactivity The amount of time that acceleration must be less than
peterswanson87 0:d0adb548714f 392 * the inactivity threshold for inactivity to be
peterswanson87 0:d0adb548714f 393 * declared, in seconds. A value of 0 results in an
peterswanson87 0:d0adb548714f 394 * interrupt when the output data is less than the
peterswanson87 0:d0adb548714f 395 * threshold inactivity.
peterswanson87 0:d0adb548714f 396 */
peterswanson87 0:d0adb548714f 397 int setTimeInactivity(char timeInactivity);
peterswanson87 0:d0adb548714f 398
peterswanson87 0:d0adb548714f 399 /**
peterswanson87 0:d0adb548714f 400 * Get the activity/inactivity control settings.
peterswanson87 0:d0adb548714f 401 *
peterswanson87 0:d0adb548714f 402 * D7 D6 D5 D4
peterswanson87 0:d0adb548714f 403 * +-----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 404 * | ACT ac/dc | ACT_X enable | ACT_Y enable | ACT_Z enable |
peterswanson87 0:d0adb548714f 405 * +-----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 406 *
peterswanson87 0:d0adb548714f 407 * D3 D2 D1 D0
peterswanson87 0:d0adb548714f 408 * +-------------+----------------+----------------+----------------+
peterswanson87 0:d0adb548714f 409 * | INACT ac/dc | INACT_X enable | INACT_Y enable | INACT_Z enable |
peterswanson87 0:d0adb548714f 410 * +-------------+----------------+----------------+----------------+
peterswanson87 0:d0adb548714f 411 *
peterswanson87 0:d0adb548714f 412 * See datasheet for details.
peterswanson87 0:d0adb548714f 413 *
peterswanson87 0:d0adb548714f 414 * @return The contents of the ACT_INACT_CTL register.
peterswanson87 0:d0adb548714f 415 */
peterswanson87 0:d0adb548714f 416 char getActivityInactivityControl(void);
peterswanson87 0:d0adb548714f 417
peterswanson87 0:d0adb548714f 418 /**
peterswanson87 0:d0adb548714f 419 * Set the activity/inactivity control settings.
peterswanson87 0:d0adb548714f 420 *
peterswanson87 0:d0adb548714f 421 * D7 D6 D5 D4
peterswanson87 0:d0adb548714f 422 * +-----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 423 * | ACT ac/dc | ACT_X enable | ACT_Y enable | ACT_Z enable |
peterswanson87 0:d0adb548714f 424 * +-----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 425 *
peterswanson87 0:d0adb548714f 426 * D3 D2 D1 D0
peterswanson87 0:d0adb548714f 427 * +-------------+----------------+----------------+----------------+
peterswanson87 0:d0adb548714f 428 * | INACT ac/dc | INACT_X enable | INACT_Y enable | INACT_Z enable |
peterswanson87 0:d0adb548714f 429 * +-------------+----------------+----------------+----------------+
peterswanson87 0:d0adb548714f 430 *
peterswanson87 0:d0adb548714f 431 * See datasheet for details.
peterswanson87 0:d0adb548714f 432 *
peterswanson87 0:d0adb548714f 433 * @param settings The control byte to write to the ACT_INACT_CTL register.
peterswanson87 0:d0adb548714f 434 */
peterswanson87 0:d0adb548714f 435 int setActivityInactivityControl(char settings);
peterswanson87 0:d0adb548714f 436
peterswanson87 0:d0adb548714f 437 /**
peterswanson87 0:d0adb548714f 438 * Get the threshold for free fall detection.
peterswanson87 0:d0adb548714f 439 *
peterswanson87 0:d0adb548714f 440 * @return The threshold value for free-fall detection, as an 8-bit number,
peterswanson87 0:d0adb548714f 441 * with scale factor 62.5mg/LSB.
peterswanson87 0:d0adb548714f 442 */
peterswanson87 0:d0adb548714f 443 char getFreefallThreshold(void);
peterswanson87 0:d0adb548714f 444
peterswanson87 0:d0adb548714f 445 /**
peterswanson87 0:d0adb548714f 446 * Set the threshold for free fall detection.
peterswanson87 0:d0adb548714f 447 *
peterswanson87 0:d0adb548714f 448 * @return The threshold value for free-fall detection, as an 8-bit number,
peterswanson87 0:d0adb548714f 449 * with scale factor 62.5mg/LSB. A value of 0 may result in
peterswanson87 0:d0adb548714f 450 * undesirable behavior if the free-fall interrupt is enabled.
peterswanson87 0:d0adb548714f 451 * Values between 300 mg and 600 mg (0x05 to 0x09) are recommended.
peterswanson87 0:d0adb548714f 452 */
peterswanson87 0:d0adb548714f 453 int setFreefallThreshold(char threshold);
peterswanson87 0:d0adb548714f 454
peterswanson87 0:d0adb548714f 455 /**
peterswanson87 0:d0adb548714f 456 * Get the time required to generate a free fall interrupt.
peterswanson87 0:d0adb548714f 457 *
peterswanson87 0:d0adb548714f 458 * @return The minimum time that the value of all axes must be less than
peterswanson87 0:d0adb548714f 459 * the freefall threshold to generate a free-fall interrupt, in
peterswanson87 0:d0adb548714f 460 * milliseconds.
peterswanson87 0:d0adb548714f 461 */
peterswanson87 0:d0adb548714f 462 char getFreefallTime(void);
peterswanson87 0:d0adb548714f 463
peterswanson87 0:d0adb548714f 464 /**
peterswanson87 0:d0adb548714f 465 * Set the time required to generate a free fall interrupt.
peterswanson87 0:d0adb548714f 466 *
peterswanson87 0:d0adb548714f 467 * @return The minimum time that the value of all axes must be less than
peterswanson87 0:d0adb548714f 468 * the freefall threshold to generate a free-fall interrupt, in
peterswanson87 0:d0adb548714f 469 * milliseconds. A value of 0 may result in undesirable behavior
peterswanson87 0:d0adb548714f 470 * if the free-fall interrupt is enabled. Values between 100 ms
peterswanson87 0:d0adb548714f 471 * and 350 ms (0x14 to 0x46) are recommended.
peterswanson87 0:d0adb548714f 472 */
peterswanson87 0:d0adb548714f 473 int setFreefallTime(short int freefallTime_ms);
peterswanson87 0:d0adb548714f 474
peterswanson87 0:d0adb548714f 475 /**
peterswanson87 0:d0adb548714f 476 * Get the axis tap settings.
peterswanson87 0:d0adb548714f 477 *
peterswanson87 0:d0adb548714f 478 * D3 D2 D1 D0
peterswanson87 0:d0adb548714f 479 * +----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 480 * | Suppress | TAP_X enable | TAP_Y enable | TAP_Z enable |
peterswanson87 0:d0adb548714f 481 * +----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 482 *
peterswanson87 0:d0adb548714f 483 * (D7-D4 are 0s).
peterswanson87 0:d0adb548714f 484 *
peterswanson87 0:d0adb548714f 485 * See datasheet for more details.
peterswanson87 0:d0adb548714f 486 *
peterswanson87 0:d0adb548714f 487 * @return The contents of the TAP_AXES register.
peterswanson87 0:d0adb548714f 488 */
peterswanson87 0:d0adb548714f 489 char getTapAxisControl(void);
peterswanson87 0:d0adb548714f 490
peterswanson87 0:d0adb548714f 491 /**
peterswanson87 0:d0adb548714f 492 * Set the axis tap settings.
peterswanson87 0:d0adb548714f 493 *
peterswanson87 0:d0adb548714f 494 * D3 D2 D1 D0
peterswanson87 0:d0adb548714f 495 * +----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 496 * | Suppress | TAP_X enable | TAP_Y enable | TAP_Z enable |
peterswanson87 0:d0adb548714f 497 * +----------+--------------+--------------+--------------+
peterswanson87 0:d0adb548714f 498 *
peterswanson87 0:d0adb548714f 499 * (D7-D4 are 0s).
peterswanson87 0:d0adb548714f 500 *
peterswanson87 0:d0adb548714f 501 * See datasheet for more details.
peterswanson87 0:d0adb548714f 502 *
peterswanson87 0:d0adb548714f 503 * @param The control byte to write to the TAP_AXES register.
peterswanson87 0:d0adb548714f 504 */
peterswanson87 0:d0adb548714f 505 int setTapAxisControl(char settings);
peterswanson87 0:d0adb548714f 506
peterswanson87 0:d0adb548714f 507 /**
peterswanson87 0:d0adb548714f 508 * Get the source of a tap.
peterswanson87 0:d0adb548714f 509 *
peterswanson87 0:d0adb548714f 510 * @return The contents of the ACT_TAP_STATUS register.
peterswanson87 0:d0adb548714f 511 */
peterswanson87 0:d0adb548714f 512 char getTapSource(void);
peterswanson87 0:d0adb548714f 513
peterswanson87 0:d0adb548714f 514 /**
peterswanson87 0:d0adb548714f 515 * Get the interrupt enable settings.
peterswanson87 0:d0adb548714f 516 *
peterswanson87 0:d0adb548714f 517 * @return The contents of the INT_ENABLE register.
peterswanson87 0:d0adb548714f 518 */
peterswanson87 0:d0adb548714f 519
peterswanson87 0:d0adb548714f 520 char getInterruptEnableControl(void);
peterswanson87 0:d0adb548714f 521
peterswanson87 0:d0adb548714f 522 /**
peterswanson87 0:d0adb548714f 523 * Set the interrupt enable settings.
peterswanson87 0:d0adb548714f 524 *
peterswanson87 0:d0adb548714f 525 * @param settings The control byte to write to the INT_ENABLE register.
peterswanson87 0:d0adb548714f 526 */
peterswanson87 0:d0adb548714f 527 int setInterruptEnableControl(char settings);
peterswanson87 0:d0adb548714f 528
peterswanson87 0:d0adb548714f 529 /**
peterswanson87 0:d0adb548714f 530 * Get the interrupt mapping settings.
peterswanson87 0:d0adb548714f 531 *
peterswanson87 0:d0adb548714f 532 * @return The contents of the INT_MAP register.
peterswanson87 0:d0adb548714f 533 */
peterswanson87 0:d0adb548714f 534 char getInterruptMappingControl(void);
peterswanson87 0:d0adb548714f 535
peterswanson87 0:d0adb548714f 536 /**
peterswanson87 0:d0adb548714f 537 * Set the interrupt mapping settings.
peterswanson87 0:d0adb548714f 538 *
peterswanson87 0:d0adb548714f 539 * @param settings The control byte to write to the INT_MAP register.
peterswanson87 0:d0adb548714f 540 */
peterswanson87 0:d0adb548714f 541 int setInterruptMappingControl(char settings);
peterswanson87 0:d0adb548714f 542
peterswanson87 0:d0adb548714f 543 /**
peterswanson87 0:d0adb548714f 544 * Get the interrupt source.
peterswanson87 0:d0adb548714f 545 *
peterswanson87 0:d0adb548714f 546 * @return The contents of the INT_SOURCE register.
peterswanson87 0:d0adb548714f 547 */
peterswanson87 0:d0adb548714f 548 char getInterruptSource(void);
peterswanson87 0:d0adb548714f 549
peterswanson87 0:d0adb548714f 550
peterswanson87 0:d0adb548714f 551 private:
peterswanson87 0:d0adb548714f 552
peterswanson87 0:d0adb548714f 553 I2C i2c_;
peterswanson87 0:d0adb548714f 554
peterswanson87 0:d0adb548714f 555
peterswanson87 0:d0adb548714f 556 /**
peterswanson87 0:d0adb548714f 557 * Read one byte from a register on the device.
peterswanson87 0:d0adb548714f 558 *
peterswanson87 0:d0adb548714f 559 * @param: - the address to be read from
peterswanson87 0:d0adb548714f 560 *
peterswanson87 0:d0adb548714f 561 * @return: the value of the data read
peterswanson87 0:d0adb548714f 562 */
peterswanson87 0:d0adb548714f 563 char SingleByteRead(char address);
peterswanson87 0:d0adb548714f 564
peterswanson87 0:d0adb548714f 565 /**
peterswanson87 0:d0adb548714f 566 * Write one byte to a register on the device.
peterswanson87 0:d0adb548714f 567 *
peterswanson87 0:d0adb548714f 568 * @param:
peterswanson87 0:d0adb548714f 569 - address of the register to write to.
peterswanson87 0:d0adb548714f 570 - the value of the data to store
peterswanson87 0:d0adb548714f 571 */
peterswanson87 0:d0adb548714f 572
peterswanson87 0:d0adb548714f 573
peterswanson87 0:d0adb548714f 574 int SingleByteWrite(char address, char data);
peterswanson87 0:d0adb548714f 575
peterswanson87 0:d0adb548714f 576 /**
peterswanson87 0:d0adb548714f 577 * Read several consecutive bytes on the device and store them in a given location.
peterswanson87 0:d0adb548714f 578 *
peterswanson87 0:d0adb548714f 579 * @param startAddress: The address of the first register to read from.
peterswanson87 0:d0adb548714f 580 * @param ptr_output: a pointer to the location to store the data being read
peterswanson87 0:d0adb548714f 581 * @param size: The number of bytes to read.
peterswanson87 0:d0adb548714f 582 */
peterswanson87 0:d0adb548714f 583 void multiByteRead(char startAddress, char* ptr_output, int size);
peterswanson87 0:d0adb548714f 584
peterswanson87 0:d0adb548714f 585 /**
peterswanson87 0:d0adb548714f 586 * Write several consecutive bytes on the device.
peterswanson87 0:d0adb548714f 587 *
peterswanson87 0:d0adb548714f 588 * @param startAddress: The address of the first register to write to.
peterswanson87 0:d0adb548714f 589 * @param ptr_data: Pointer to a location which contains the data to write.
peterswanson87 0:d0adb548714f 590 * @param size: The number of bytes to write.
peterswanson87 0:d0adb548714f 591 */
peterswanson87 0:d0adb548714f 592 int multiByteWrite(char startAddress, char* ptr_data, int size);
peterswanson87 0:d0adb548714f 593
peterswanson87 0:d0adb548714f 594 };
peterswanson87 0:d0adb548714f 595
peterswanson87 0:d0adb548714f 596 #endif /* ADXL345_I2C_H */