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

Dependents:   sensors-example

Committer:
peterswanson87
Date:
Thu May 12 00:48:39 2011 +0000
Revision:
0:d0adb548714f
Child:
1:d9412b56f98a

        

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