Forked from Uwe Gartmann's ADXL345 library, customized as part of the 9DOF stick from Sparkfun.com

Fork of ADXL345 by Uwe Gartmann

ADXL345 is triple axis, digital interface, accelerometer.

This library is forked from Uwe Gartmann and Peter Swanson's work.

This library is for specific application using 9DoF-Stick.

Datasheet:

http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf

ADXL345は3軸のデジタルインターフェースを備えた加速度センサです。

このライブラリは 9DoF-Stick を使用した特定の企画のために保守しています。

mbed IDEが日本語をサポートするまでは英語でコメントを書いていきますが、サポートした後もきっと英語で書いていくでしょう。

Committer:
Digixx
Date:
Fri Oct 07 19:13:33 2011 +0000
Revision:
0:1e4aa22fc1a1
Child:
1:45faba962a46

        

Who changed what in which revision?

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