Republished Library, to be refined for use with the SparkFun 9DOF in HARP project.

Dependents:   vmConfort_v6

Fork of ADXL345 by Tyler Weaver

Committer:
escalona
Date:
Wed Jan 16 11:10:19 2013 +0000
Revision:
11:c0fe48a352ca
Parent:
10:d81793e01ec4
primer commit Juan

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Digixx 0:1e4aa22fc1a1 1 /**
escalona 11:c0fe48a352ca 2 * @author Aaron Berk
escalona 11:c0fe48a352ca 3 *
escalona 11:c0fe48a352ca 4 * @section LICENSE
Digixx 0:1e4aa22fc1a1 5 *
escalona 11:c0fe48a352ca 6 * Copyright (c) 2010 ARM Limited
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 *
escalona 11:c0fe48a352ca 28 * ADXL345, triple axis, digital 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
escalona 11:c0fe48a352ca 33 */
escalona 11:c0fe48a352ca 34
escalona 11:c0fe48a352ca 35 /**
Digixx 0:1e4aa22fc1a1 36 * Includes
Digixx 0:1e4aa22fc1a1 37 */
Digixx 0:1e4aa22fc1a1 38 #include "ADXL345.h"
Digixx 0:1e4aa22fc1a1 39
escalona 11:c0fe48a352ca 40 ADXL345::ADXL345(PinName mosi,
escalona 11:c0fe48a352ca 41 PinName miso,
escalona 11:c0fe48a352ca 42 PinName sck,
escalona 11:c0fe48a352ca 43 PinName cs) : spi_(mosi, miso, sck), nCS_(cs) {
Digixx 0:1e4aa22fc1a1 44
escalona 11:c0fe48a352ca 45 //1.5MHz, allowing us to use the fastest data rates without problems with the FIFO (must be less than 1.6MHz)
escalona 11:c0fe48a352ca 46 spi_.frequency(1500000);
escalona 11:c0fe48a352ca 47 spi_.format(8,3);
escalona 11:c0fe48a352ca 48
escalona 11:c0fe48a352ca 49 nCS_ = 1;
Digixx 0:1e4aa22fc1a1 50
escalona 11:c0fe48a352ca 51 wait_us(500);
Digixx 0:1e4aa22fc1a1 52
Digixx 0:1e4aa22fc1a1 53 }
Digixx 0:1e4aa22fc1a1 54
escalona 11:c0fe48a352ca 55 int ADXL345::getDevId(void) {
Digixx 0:1e4aa22fc1a1 56
escalona 11:c0fe48a352ca 57 return oneByteRead(ADXL345_DEVID_REG);
escalona 11:c0fe48a352ca 58
Digixx 0:1e4aa22fc1a1 59 }
Digixx 0:1e4aa22fc1a1 60
escalona 11:c0fe48a352ca 61 int ADXL345::getTapThreshold(void) {
escalona 11:c0fe48a352ca 62
escalona 11:c0fe48a352ca 63 return oneByteRead(ADXL345_THRESH_TAP_REG);
escalona 11:c0fe48a352ca 64
gltest26 4:8046894b947e 65 }
gltest26 4:8046894b947e 66
escalona 11:c0fe48a352ca 67 void ADXL345::setTapThreshold(int threshold) {
Digixx 0:1e4aa22fc1a1 68
escalona 11:c0fe48a352ca 69 oneByteWrite(ADXL345_THRESH_TAP_REG, threshold);
Digixx 0:1e4aa22fc1a1 70
Digixx 0:1e4aa22fc1a1 71 }
Digixx 0:1e4aa22fc1a1 72
escalona 11:c0fe48a352ca 73 int ADXL345::getOffset(int axis) {
Digixx 0:1e4aa22fc1a1 74
escalona 11:c0fe48a352ca 75 int address = 0;
Digixx 0:1e4aa22fc1a1 76
Digixx 0:1e4aa22fc1a1 77 if (axis == ADXL345_X) {
Digixx 0:1e4aa22fc1a1 78 address = ADXL345_OFSX_REG;
Digixx 0:1e4aa22fc1a1 79 } else if (axis == ADXL345_Y) {
Digixx 0:1e4aa22fc1a1 80 address = ADXL345_OFSY_REG;
Digixx 0:1e4aa22fc1a1 81 } else if (axis == ADXL345_Z) {
Digixx 0:1e4aa22fc1a1 82 address = ADXL345_OFSZ_REG;
Digixx 0:1e4aa22fc1a1 83 }
Digixx 0:1e4aa22fc1a1 84
escalona 11:c0fe48a352ca 85 return oneByteRead(address);
escalona 11:c0fe48a352ca 86
Digixx 0:1e4aa22fc1a1 87 }
Digixx 0:1e4aa22fc1a1 88
escalona 11:c0fe48a352ca 89 void ADXL345::setOffset(int axis, char offset) {
escalona 11:c0fe48a352ca 90
escalona 11:c0fe48a352ca 91 int address = 0;
Digixx 0:1e4aa22fc1a1 92
Digixx 0:1e4aa22fc1a1 93 if (axis == ADXL345_X) {
Digixx 0:1e4aa22fc1a1 94 address = ADXL345_OFSX_REG;
Digixx 0:1e4aa22fc1a1 95 } else if (axis == ADXL345_Y) {
Digixx 0:1e4aa22fc1a1 96 address = ADXL345_OFSY_REG;
Digixx 0:1e4aa22fc1a1 97 } else if (axis == ADXL345_Z) {
Digixx 0:1e4aa22fc1a1 98 address = ADXL345_OFSZ_REG;
Digixx 0:1e4aa22fc1a1 99 }
Digixx 0:1e4aa22fc1a1 100
escalona 11:c0fe48a352ca 101 return oneByteWrite(address, offset);
escalona 11:c0fe48a352ca 102
escalona 11:c0fe48a352ca 103 }
escalona 11:c0fe48a352ca 104
escalona 11:c0fe48a352ca 105 int ADXL345::getTapDuration(void) {
escalona 11:c0fe48a352ca 106
escalona 11:c0fe48a352ca 107 return oneByteRead(ADXL345_DUR_REG)*625;
escalona 11:c0fe48a352ca 108
escalona 11:c0fe48a352ca 109 }
escalona 11:c0fe48a352ca 110
escalona 11:c0fe48a352ca 111 void ADXL345::setTapDuration(int duration_us) {
escalona 11:c0fe48a352ca 112
escalona 11:c0fe48a352ca 113 int tapDuration = duration_us / 625;
escalona 11:c0fe48a352ca 114
escalona 11:c0fe48a352ca 115 oneByteWrite(ADXL345_DUR_REG, tapDuration);
escalona 11:c0fe48a352ca 116
escalona 11:c0fe48a352ca 117 }
escalona 11:c0fe48a352ca 118
escalona 11:c0fe48a352ca 119 float ADXL345::getTapLatency(void) {
escalona 11:c0fe48a352ca 120
escalona 11:c0fe48a352ca 121 return oneByteRead(ADXL345_LATENT_REG)*1.25;
escalona 11:c0fe48a352ca 122
escalona 11:c0fe48a352ca 123 }
escalona 11:c0fe48a352ca 124
escalona 11:c0fe48a352ca 125 void ADXL345::setTapLatency(int latency_ms) {
escalona 11:c0fe48a352ca 126
escalona 11:c0fe48a352ca 127 int tapLatency = latency_ms / 1.25;
escalona 11:c0fe48a352ca 128
escalona 11:c0fe48a352ca 129 oneByteWrite(ADXL345_LATENT_REG, tapLatency);
escalona 11:c0fe48a352ca 130
escalona 11:c0fe48a352ca 131 }
escalona 11:c0fe48a352ca 132
escalona 11:c0fe48a352ca 133 float ADXL345::getWindowTime(void) {
escalona 11:c0fe48a352ca 134
escalona 11:c0fe48a352ca 135 return oneByteRead(ADXL345_WINDOW_REG)*1.25;
escalona 11:c0fe48a352ca 136
escalona 11:c0fe48a352ca 137 }
escalona 11:c0fe48a352ca 138
escalona 11:c0fe48a352ca 139 void ADXL345::setWindowTime(int window_ms) {
escalona 11:c0fe48a352ca 140
escalona 11:c0fe48a352ca 141 int windowTime = window_ms / 1.25;
escalona 11:c0fe48a352ca 142
escalona 11:c0fe48a352ca 143 oneByteWrite(ADXL345_WINDOW_REG, windowTime);
escalona 11:c0fe48a352ca 144
escalona 11:c0fe48a352ca 145 }
escalona 11:c0fe48a352ca 146
escalona 11:c0fe48a352ca 147 int ADXL345::getActivityThreshold(void) {
escalona 11:c0fe48a352ca 148
escalona 11:c0fe48a352ca 149 return oneByteRead(ADXL345_THRESH_ACT_REG);
escalona 11:c0fe48a352ca 150
escalona 11:c0fe48a352ca 151 }
escalona 11:c0fe48a352ca 152
escalona 11:c0fe48a352ca 153 void ADXL345::setActivityThreshold(int threshold) {
escalona 11:c0fe48a352ca 154
escalona 11:c0fe48a352ca 155 oneByteWrite(ADXL345_THRESH_ACT_REG, threshold);
escalona 11:c0fe48a352ca 156
escalona 11:c0fe48a352ca 157 }
escalona 11:c0fe48a352ca 158
escalona 11:c0fe48a352ca 159 int ADXL345::getInactivityThreshold(void) {
escalona 11:c0fe48a352ca 160
escalona 11:c0fe48a352ca 161 return oneByteRead(ADXL345_THRESH_INACT_REG);
escalona 11:c0fe48a352ca 162
escalona 11:c0fe48a352ca 163 }
escalona 11:c0fe48a352ca 164
escalona 11:c0fe48a352ca 165 void ADXL345::setInactivityThreshold(int threshold) {
escalona 11:c0fe48a352ca 166
escalona 11:c0fe48a352ca 167 return oneByteWrite(ADXL345_THRESH_INACT_REG, threshold);
escalona 11:c0fe48a352ca 168
escalona 11:c0fe48a352ca 169 }
escalona 11:c0fe48a352ca 170
escalona 11:c0fe48a352ca 171 int ADXL345::getTimeInactivity(void) {
escalona 11:c0fe48a352ca 172
escalona 11:c0fe48a352ca 173 return oneByteRead(ADXL345_TIME_INACT_REG);
escalona 11:c0fe48a352ca 174
escalona 11:c0fe48a352ca 175 }
escalona 11:c0fe48a352ca 176
escalona 11:c0fe48a352ca 177 void ADXL345::setTimeInactivity(int timeInactivity) {
escalona 11:c0fe48a352ca 178
escalona 11:c0fe48a352ca 179 oneByteWrite(ADXL345_TIME_INACT_REG, timeInactivity);
escalona 11:c0fe48a352ca 180
escalona 11:c0fe48a352ca 181 }
escalona 11:c0fe48a352ca 182
escalona 11:c0fe48a352ca 183 int ADXL345::getActivityInactivityControl(void) {
escalona 11:c0fe48a352ca 184
escalona 11:c0fe48a352ca 185 return oneByteRead(ADXL345_ACT_INACT_CTL_REG);
escalona 11:c0fe48a352ca 186
escalona 11:c0fe48a352ca 187 }
escalona 11:c0fe48a352ca 188
escalona 11:c0fe48a352ca 189 void ADXL345::setActivityInactivityControl(int settings) {
escalona 11:c0fe48a352ca 190
escalona 11:c0fe48a352ca 191 oneByteWrite(ADXL345_ACT_INACT_CTL_REG, settings);
escalona 11:c0fe48a352ca 192
escalona 11:c0fe48a352ca 193 }
escalona 11:c0fe48a352ca 194
escalona 11:c0fe48a352ca 195 int ADXL345::getFreefallThreshold(void) {
escalona 11:c0fe48a352ca 196
escalona 11:c0fe48a352ca 197 return oneByteRead(ADXL345_THRESH_FF_REG);
escalona 11:c0fe48a352ca 198
escalona 11:c0fe48a352ca 199 }
escalona 11:c0fe48a352ca 200
escalona 11:c0fe48a352ca 201 void ADXL345::setFreefallThreshold(int threshold) {
escalona 11:c0fe48a352ca 202
escalona 11:c0fe48a352ca 203 oneByteWrite(ADXL345_THRESH_FF_REG, threshold);
escalona 11:c0fe48a352ca 204
escalona 11:c0fe48a352ca 205 }
escalona 11:c0fe48a352ca 206
escalona 11:c0fe48a352ca 207 int ADXL345::getFreefallTime(void) {
escalona 11:c0fe48a352ca 208
escalona 11:c0fe48a352ca 209 return oneByteRead(ADXL345_TIME_FF_REG)*5;
escalona 11:c0fe48a352ca 210
escalona 11:c0fe48a352ca 211 }
escalona 11:c0fe48a352ca 212
escalona 11:c0fe48a352ca 213 void ADXL345::setFreefallTime(int freefallTime_ms) {
escalona 11:c0fe48a352ca 214
escalona 11:c0fe48a352ca 215 int freefallTime = freefallTime_ms / 5;
escalona 11:c0fe48a352ca 216
escalona 11:c0fe48a352ca 217 oneByteWrite(ADXL345_TIME_FF_REG, freefallTime);
escalona 11:c0fe48a352ca 218
escalona 11:c0fe48a352ca 219 }
escalona 11:c0fe48a352ca 220
escalona 11:c0fe48a352ca 221 int ADXL345::getTapAxisControl(void) {
escalona 11:c0fe48a352ca 222
escalona 11:c0fe48a352ca 223 return oneByteRead(ADXL345_TAP_AXES_REG);
escalona 11:c0fe48a352ca 224
escalona 11:c0fe48a352ca 225 }
escalona 11:c0fe48a352ca 226
escalona 11:c0fe48a352ca 227 void ADXL345::setTapAxisControl(int settings) {
escalona 11:c0fe48a352ca 228
escalona 11:c0fe48a352ca 229 oneByteWrite(ADXL345_TAP_AXES_REG, settings);
escalona 11:c0fe48a352ca 230
escalona 11:c0fe48a352ca 231 }
escalona 11:c0fe48a352ca 232
escalona 11:c0fe48a352ca 233 int ADXL345::getTapSource(void) {
escalona 11:c0fe48a352ca 234
escalona 11:c0fe48a352ca 235 return oneByteRead(ADXL345_ACT_TAP_STATUS_REG);
escalona 11:c0fe48a352ca 236
escalona 11:c0fe48a352ca 237 }
escalona 11:c0fe48a352ca 238
escalona 11:c0fe48a352ca 239 void ADXL345::setPowerMode(char mode) {
escalona 11:c0fe48a352ca 240
escalona 11:c0fe48a352ca 241 //Get the current register contents, so we don't clobber the rate value.
escalona 11:c0fe48a352ca 242 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
escalona 11:c0fe48a352ca 243
escalona 11:c0fe48a352ca 244 registerContents = (mode << 4) | registerContents;
escalona 11:c0fe48a352ca 245
escalona 11:c0fe48a352ca 246 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
escalona 11:c0fe48a352ca 247
escalona 11:c0fe48a352ca 248 }
escalona 11:c0fe48a352ca 249
escalona 11:c0fe48a352ca 250 int ADXL345::getPowerControl(void) {
escalona 11:c0fe48a352ca 251
escalona 11:c0fe48a352ca 252 return oneByteRead(ADXL345_POWER_CTL_REG);
escalona 11:c0fe48a352ca 253
escalona 11:c0fe48a352ca 254 }
escalona 11:c0fe48a352ca 255
escalona 11:c0fe48a352ca 256 void ADXL345::setPowerControl(int settings) {
escalona 11:c0fe48a352ca 257
escalona 11:c0fe48a352ca 258 oneByteWrite(ADXL345_POWER_CTL_REG, settings);
escalona 11:c0fe48a352ca 259
escalona 11:c0fe48a352ca 260 }
escalona 11:c0fe48a352ca 261
escalona 11:c0fe48a352ca 262 int ADXL345::getInterruptEnableControl(void) {
escalona 11:c0fe48a352ca 263
escalona 11:c0fe48a352ca 264 return oneByteRead(ADXL345_INT_ENABLE_REG);
escalona 11:c0fe48a352ca 265
escalona 11:c0fe48a352ca 266 }
escalona 11:c0fe48a352ca 267
escalona 11:c0fe48a352ca 268 void ADXL345::setInterruptEnableControl(int settings) {
escalona 11:c0fe48a352ca 269
escalona 11:c0fe48a352ca 270 oneByteWrite(ADXL345_INT_ENABLE_REG, settings);
escalona 11:c0fe48a352ca 271
escalona 11:c0fe48a352ca 272 }
escalona 11:c0fe48a352ca 273
escalona 11:c0fe48a352ca 274 int ADXL345::getInterruptMappingControl(void) {
escalona 11:c0fe48a352ca 275
escalona 11:c0fe48a352ca 276 return oneByteRead(ADXL345_INT_MAP_REG);
escalona 11:c0fe48a352ca 277
escalona 11:c0fe48a352ca 278 }
escalona 11:c0fe48a352ca 279
escalona 11:c0fe48a352ca 280 void ADXL345::setInterruptMappingControl(int settings) {
escalona 11:c0fe48a352ca 281
escalona 11:c0fe48a352ca 282 oneByteWrite(ADXL345_INT_MAP_REG, settings);
escalona 11:c0fe48a352ca 283
escalona 11:c0fe48a352ca 284 }
escalona 11:c0fe48a352ca 285
escalona 11:c0fe48a352ca 286 int ADXL345::getInterruptSource(void){
escalona 11:c0fe48a352ca 287
escalona 11:c0fe48a352ca 288 return oneByteRead(ADXL345_INT_SOURCE_REG);
escalona 11:c0fe48a352ca 289
escalona 11:c0fe48a352ca 290 }
escalona 11:c0fe48a352ca 291
escalona 11:c0fe48a352ca 292 int ADXL345::getDataFormatControl(void){
escalona 11:c0fe48a352ca 293
escalona 11:c0fe48a352ca 294 return oneByteRead(ADXL345_DATA_FORMAT_REG);
escalona 11:c0fe48a352ca 295
escalona 11:c0fe48a352ca 296 }
escalona 11:c0fe48a352ca 297
escalona 11:c0fe48a352ca 298 void ADXL345::setDataFormatControl(int settings){
escalona 11:c0fe48a352ca 299
escalona 11:c0fe48a352ca 300 oneByteWrite(ADXL345_DATA_FORMAT_REG, settings);
escalona 11:c0fe48a352ca 301
escalona 11:c0fe48a352ca 302 }
escalona 11:c0fe48a352ca 303
escalona 11:c0fe48a352ca 304 void ADXL345::setDataRate(int rate) {
escalona 11:c0fe48a352ca 305
escalona 11:c0fe48a352ca 306 //Get the current register contents, so we don't clobber the power bit.
escalona 11:c0fe48a352ca 307 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
escalona 11:c0fe48a352ca 308
escalona 11:c0fe48a352ca 309 registerContents &= 0x10;
escalona 11:c0fe48a352ca 310 registerContents |= rate;
escalona 11:c0fe48a352ca 311
escalona 11:c0fe48a352ca 312 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
escalona 11:c0fe48a352ca 313
escalona 11:c0fe48a352ca 314 }
escalona 11:c0fe48a352ca 315
escalona 11:c0fe48a352ca 316 int ADXL345::getAx(){
escalona 11:c0fe48a352ca 317
escalona 11:c0fe48a352ca 318 char buffer[2];
escalona 11:c0fe48a352ca 319
escalona 11:c0fe48a352ca 320 multiByteRead(ADXL345_DATAX0_REG, buffer, 2);
escalona 11:c0fe48a352ca 321
escalona 11:c0fe48a352ca 322 return ((int)buffer[1] << 8 | (int)buffer[0]);
Digixx 0:1e4aa22fc1a1 323 }
Digixx 0:1e4aa22fc1a1 324
Digixx 0:1e4aa22fc1a1 325
escalona 11:c0fe48a352ca 326 int ADXL345::getAy(){
Digixx 0:1e4aa22fc1a1 327
escalona 11:c0fe48a352ca 328 char buffer[2];
escalona 11:c0fe48a352ca 329
escalona 11:c0fe48a352ca 330 multiByteRead(ADXL345_DATAY0_REG, buffer, 2);
escalona 11:c0fe48a352ca 331
escalona 11:c0fe48a352ca 332 return ((int)buffer[1] << 8 | (int)buffer[0]);
Digixx 0:1e4aa22fc1a1 333 }
Digixx 0:1e4aa22fc1a1 334
escalona 11:c0fe48a352ca 335 int ADXL345::getAz(){
Digixx 0:1e4aa22fc1a1 336
escalona 11:c0fe48a352ca 337 char buffer[2];
escalona 11:c0fe48a352ca 338
escalona 11:c0fe48a352ca 339 multiByteRead(ADXL345_DATAZ0_REG, buffer, 2);
escalona 11:c0fe48a352ca 340
escalona 11:c0fe48a352ca 341 return ((int)buffer[1] << 8 | (int)buffer[0]);
Digixx 0:1e4aa22fc1a1 342 }
Digixx 0:1e4aa22fc1a1 343
escalona 11:c0fe48a352ca 344
Digixx 0:1e4aa22fc1a1 345
escalona 11:c0fe48a352ca 346 void ADXL345::getOutput(int* readings){
Digixx 0:1e4aa22fc1a1 347
escalona 11:c0fe48a352ca 348 char buffer[6];
escalona 11:c0fe48a352ca 349
escalona 11:c0fe48a352ca 350 multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
escalona 11:c0fe48a352ca 351
escalona 11:c0fe48a352ca 352 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
escalona 11:c0fe48a352ca 353 readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
escalona 11:c0fe48a352ca 354 readings[2] = (int)buffer[5] << 8 | (int)buffer[4];
Digixx 0:1e4aa22fc1a1 355
Digixx 0:1e4aa22fc1a1 356 }
Digixx 0:1e4aa22fc1a1 357
escalona 11:c0fe48a352ca 358 int ADXL345::getFifoControl(void){
Digixx 0:1e4aa22fc1a1 359
escalona 11:c0fe48a352ca 360 return oneByteRead(ADXL345_FIFO_CTL);
Digixx 0:1e4aa22fc1a1 361
Digixx 0:1e4aa22fc1a1 362 }
Digixx 0:1e4aa22fc1a1 363
escalona 11:c0fe48a352ca 364 void ADXL345::setFifoControl(int settings){
tylerjw 6:5fb29534a6cf 365
escalona 11:c0fe48a352ca 366 oneByteWrite(ADXL345_FIFO_CTL, settings);
escalona 11:c0fe48a352ca 367
Digixx 0:1e4aa22fc1a1 368 }
Digixx 0:1e4aa22fc1a1 369
escalona 11:c0fe48a352ca 370 int ADXL345::getFifoStatus(void){
Digixx 0:1e4aa22fc1a1 371
escalona 11:c0fe48a352ca 372 return oneByteRead(ADXL345_FIFO_STATUS);
Digixx 0:1e4aa22fc1a1 373
Digixx 0:1e4aa22fc1a1 374 }
Digixx 0:1e4aa22fc1a1 375
escalona 11:c0fe48a352ca 376 int ADXL345::oneByteRead(int address) {
escalona 11:c0fe48a352ca 377
escalona 11:c0fe48a352ca 378 int tx = (ADXL345_SPI_READ | (address & 0x3F));
escalona 11:c0fe48a352ca 379 int rx = 0;
Digixx 0:1e4aa22fc1a1 380
escalona 11:c0fe48a352ca 381 nCS_ = 0;
escalona 11:c0fe48a352ca 382 //Send address to read from.
escalona 11:c0fe48a352ca 383 spi_.write(tx);
escalona 11:c0fe48a352ca 384 //Read back contents of address.
escalona 11:c0fe48a352ca 385 rx = spi_.write(0x00);
escalona 11:c0fe48a352ca 386 nCS_ = 1;
Digixx 0:1e4aa22fc1a1 387
escalona 11:c0fe48a352ca 388 return rx;
Digixx 0:1e4aa22fc1a1 389
Digixx 0:1e4aa22fc1a1 390 }
Digixx 0:1e4aa22fc1a1 391
escalona 11:c0fe48a352ca 392 void ADXL345::oneByteWrite(int address, char data) {
tylerjw 8:4cdd4315189f 393
escalona 11:c0fe48a352ca 394 int tx = (ADXL345_SPI_WRITE | (address & 0x3F));
tylerjw 8:4cdd4315189f 395
escalona 11:c0fe48a352ca 396 nCS_ = 0;
escalona 11:c0fe48a352ca 397 //Send address to write to.
escalona 11:c0fe48a352ca 398 spi_.write(tx);
escalona 11:c0fe48a352ca 399 //Send data to be written.
escalona 11:c0fe48a352ca 400 spi_.write(data);
escalona 11:c0fe48a352ca 401 nCS_ = 1;
tylerjw 8:4cdd4315189f 402
tylerjw 8:4cdd4315189f 403 }
tylerjw 8:4cdd4315189f 404
escalona 11:c0fe48a352ca 405 void ADXL345::multiByteRead(int startAddress, char* buffer, int size) {
tylerjw 9:cc0260a2404b 406
escalona 11:c0fe48a352ca 407 int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
tylerjw 8:4cdd4315189f 408
escalona 11:c0fe48a352ca 409 nCS_ = 0;
escalona 11:c0fe48a352ca 410 //Send address to start reading from.
escalona 11:c0fe48a352ca 411 spi_.write(tx);
tylerjw 9:cc0260a2404b 412
escalona 11:c0fe48a352ca 413 for (int i = 0; i < size; i++) {
escalona 11:c0fe48a352ca 414 buffer[i] = spi_.write(0x00);
tylerjw 8:4cdd4315189f 415 }
escalona 11:c0fe48a352ca 416
escalona 11:c0fe48a352ca 417 nCS_ = 1;
escalona 11:c0fe48a352ca 418
tylerjw 8:4cdd4315189f 419 }
tylerjw 8:4cdd4315189f 420
escalona 11:c0fe48a352ca 421 void ADXL345::multiByteWrite(int startAddress, char* buffer, int size) {
tylerjw 8:4cdd4315189f 422
escalona 11:c0fe48a352ca 423 int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
tylerjw 8:4cdd4315189f 424
escalona 11:c0fe48a352ca 425 nCS_ = 0;
escalona 11:c0fe48a352ca 426 //Send address to start reading from.
escalona 11:c0fe48a352ca 427 spi_.write(tx);
tylerjw 8:4cdd4315189f 428
escalona 11:c0fe48a352ca 429 for (int i = 0; i < size; i++) {
escalona 11:c0fe48a352ca 430 buffer[i] = spi_.write(0x00);
escalona 11:c0fe48a352ca 431 }
tylerjw 8:4cdd4315189f 432
escalona 11:c0fe48a352ca 433 nCS_ = 1;
escalona 11:c0fe48a352ca 434
tylerjw 6:5fb29534a6cf 435 }