Esta versión v6 pasa a ser el nuevo master. Funciona correctamente

Dependencies:   ADXL345 Display1602 MSCFileSystem SDFileSystem mbed FATFileSystem

Committer:
JuanManuelAmador
Date:
Fri Jun 06 08:52:28 2014 +0000
Revision:
2:cc4a43d806e2
Parent:
0:a5367bd4e404
Correci?n del baudrate de 112500 a 115200

Who changed what in which revision?

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