library acel

Committer:
JonasMF
Date:
Mon Apr 28 13:05:23 2014 +0000
Revision:
0:b1e3d3177fce
program

Who changed what in which revision?

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