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 21:06:14 2011 +0000
Revision:
1:45faba962a46
Parent:
0:1e4aa22fc1a1
Child:
3:7b83694c7292

        

Who changed what in which revision?

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