Maxim nexpaq / nexpaq_dev
Committer:
nexpaq
Date:
Fri Nov 04 20:27:58 2016 +0000
Revision:
0:6c56fb4bc5f0
Moving to library for sharing updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nexpaq 0:6c56fb4bc5f0 1 /**
nexpaq 0:6c56fb4bc5f0 2 * @author Aaron Berk
nexpaq 0:6c56fb4bc5f0 3 *
nexpaq 0:6c56fb4bc5f0 4 * @section LICENSE
nexpaq 0:6c56fb4bc5f0 5 *
nexpaq 0:6c56fb4bc5f0 6 * Copyright (c) 2010 ARM Limited
nexpaq 0:6c56fb4bc5f0 7 *
nexpaq 0:6c56fb4bc5f0 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
nexpaq 0:6c56fb4bc5f0 9 * of this software and associated documentation files (the "Software"), to deal
nexpaq 0:6c56fb4bc5f0 10 * in the Software without restriction, including without limitation the rights
nexpaq 0:6c56fb4bc5f0 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
nexpaq 0:6c56fb4bc5f0 12 * copies of the Software, and to permit persons to whom the Software is
nexpaq 0:6c56fb4bc5f0 13 * furnished to do so, subject to the following conditions:
nexpaq 0:6c56fb4bc5f0 14 *
nexpaq 0:6c56fb4bc5f0 15 * The above copyright notice and this permission notice shall be included in
nexpaq 0:6c56fb4bc5f0 16 * all copies or substantial portions of the Software.
nexpaq 0:6c56fb4bc5f0 17 *
nexpaq 0:6c56fb4bc5f0 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
nexpaq 0:6c56fb4bc5f0 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
nexpaq 0:6c56fb4bc5f0 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
nexpaq 0:6c56fb4bc5f0 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
nexpaq 0:6c56fb4bc5f0 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
nexpaq 0:6c56fb4bc5f0 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
nexpaq 0:6c56fb4bc5f0 24 * THE SOFTWARE.
nexpaq 0:6c56fb4bc5f0 25 *
nexpaq 0:6c56fb4bc5f0 26 * @section DESCRIPTION
nexpaq 0:6c56fb4bc5f0 27 *
nexpaq 0:6c56fb4bc5f0 28 * ADXL345, triple axis, digital interface, accelerometer.
nexpaq 0:6c56fb4bc5f0 29 *
nexpaq 0:6c56fb4bc5f0 30 * Datasheet:
nexpaq 0:6c56fb4bc5f0 31 *
nexpaq 0:6c56fb4bc5f0 32 * http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf
nexpaq 0:6c56fb4bc5f0 33 */
nexpaq 0:6c56fb4bc5f0 34
nexpaq 0:6c56fb4bc5f0 35 /**
nexpaq 0:6c56fb4bc5f0 36 * Includes
nexpaq 0:6c56fb4bc5f0 37 */
nexpaq 0:6c56fb4bc5f0 38 #include "ADXL345.h"
nexpaq 0:6c56fb4bc5f0 39
nexpaq 0:6c56fb4bc5f0 40 ADXL345::ADXL345(PinName mosi,
nexpaq 0:6c56fb4bc5f0 41 PinName miso,
nexpaq 0:6c56fb4bc5f0 42 PinName sck,
nexpaq 0:6c56fb4bc5f0 43 PinName cs) : spi_(mosi, miso, sck), nCS_(cs) {
nexpaq 0:6c56fb4bc5f0 44
nexpaq 0:6c56fb4bc5f0 45 //2MHz, allowing us to use the fastest data rates.
nexpaq 0:6c56fb4bc5f0 46 spi_.frequency(2000000);
nexpaq 0:6c56fb4bc5f0 47 spi_.format(8,3);
nexpaq 0:6c56fb4bc5f0 48
nexpaq 0:6c56fb4bc5f0 49 nCS_ = 1;
nexpaq 0:6c56fb4bc5f0 50
nexpaq 0:6c56fb4bc5f0 51 wait_us(500);
nexpaq 0:6c56fb4bc5f0 52
nexpaq 0:6c56fb4bc5f0 53 }
nexpaq 0:6c56fb4bc5f0 54
nexpaq 0:6c56fb4bc5f0 55 int ADXL345::getDevId(void) {
nexpaq 0:6c56fb4bc5f0 56
nexpaq 0:6c56fb4bc5f0 57 return oneByteRead(ADXL345_DEVID_REG);
nexpaq 0:6c56fb4bc5f0 58
nexpaq 0:6c56fb4bc5f0 59 }
nexpaq 0:6c56fb4bc5f0 60
nexpaq 0:6c56fb4bc5f0 61 int ADXL345::getTapThreshold(void) {
nexpaq 0:6c56fb4bc5f0 62
nexpaq 0:6c56fb4bc5f0 63 return oneByteRead(ADXL345_THRESH_TAP_REG);
nexpaq 0:6c56fb4bc5f0 64
nexpaq 0:6c56fb4bc5f0 65 }
nexpaq 0:6c56fb4bc5f0 66
nexpaq 0:6c56fb4bc5f0 67 void ADXL345::setTapThreshold(int threshold) {
nexpaq 0:6c56fb4bc5f0 68
nexpaq 0:6c56fb4bc5f0 69 oneByteWrite(ADXL345_THRESH_TAP_REG, threshold);
nexpaq 0:6c56fb4bc5f0 70
nexpaq 0:6c56fb4bc5f0 71 }
nexpaq 0:6c56fb4bc5f0 72
nexpaq 0:6c56fb4bc5f0 73 int ADXL345::getOffset(int axis) {
nexpaq 0:6c56fb4bc5f0 74
nexpaq 0:6c56fb4bc5f0 75 int address = 0;
nexpaq 0:6c56fb4bc5f0 76
nexpaq 0:6c56fb4bc5f0 77 if (axis == ADXL345_X) {
nexpaq 0:6c56fb4bc5f0 78 address = ADXL345_OFSX_REG;
nexpaq 0:6c56fb4bc5f0 79 } else if (axis == ADXL345_Y) {
nexpaq 0:6c56fb4bc5f0 80 address = ADXL345_OFSY_REG;
nexpaq 0:6c56fb4bc5f0 81 } else if (axis == ADXL345_Z) {
nexpaq 0:6c56fb4bc5f0 82 address = ADXL345_OFSZ_REG;
nexpaq 0:6c56fb4bc5f0 83 }
nexpaq 0:6c56fb4bc5f0 84
nexpaq 0:6c56fb4bc5f0 85 return oneByteRead(address);
nexpaq 0:6c56fb4bc5f0 86
nexpaq 0:6c56fb4bc5f0 87 }
nexpaq 0:6c56fb4bc5f0 88
nexpaq 0:6c56fb4bc5f0 89 void ADXL345::setOffset(int axis, char offset) {
nexpaq 0:6c56fb4bc5f0 90
nexpaq 0:6c56fb4bc5f0 91 int address = 0;
nexpaq 0:6c56fb4bc5f0 92
nexpaq 0:6c56fb4bc5f0 93 if (axis == ADXL345_X) {
nexpaq 0:6c56fb4bc5f0 94 address = ADXL345_OFSX_REG;
nexpaq 0:6c56fb4bc5f0 95 } else if (axis == ADXL345_Y) {
nexpaq 0:6c56fb4bc5f0 96 address = ADXL345_OFSY_REG;
nexpaq 0:6c56fb4bc5f0 97 } else if (axis == ADXL345_Z) {
nexpaq 0:6c56fb4bc5f0 98 address = ADXL345_OFSZ_REG;
nexpaq 0:6c56fb4bc5f0 99 }
nexpaq 0:6c56fb4bc5f0 100
nexpaq 0:6c56fb4bc5f0 101 return oneByteWrite(address, offset);
nexpaq 0:6c56fb4bc5f0 102
nexpaq 0:6c56fb4bc5f0 103 }
nexpaq 0:6c56fb4bc5f0 104
nexpaq 0:6c56fb4bc5f0 105 int ADXL345::getTapDuration(void) {
nexpaq 0:6c56fb4bc5f0 106
nexpaq 0:6c56fb4bc5f0 107 return oneByteRead(ADXL345_DUR_REG)*625;
nexpaq 0:6c56fb4bc5f0 108
nexpaq 0:6c56fb4bc5f0 109 }
nexpaq 0:6c56fb4bc5f0 110
nexpaq 0:6c56fb4bc5f0 111 void ADXL345::setTapDuration(int duration_us) {
nexpaq 0:6c56fb4bc5f0 112
nexpaq 0:6c56fb4bc5f0 113 int tapDuration = duration_us / 625;
nexpaq 0:6c56fb4bc5f0 114
nexpaq 0:6c56fb4bc5f0 115 oneByteWrite(ADXL345_DUR_REG, tapDuration);
nexpaq 0:6c56fb4bc5f0 116
nexpaq 0:6c56fb4bc5f0 117 }
nexpaq 0:6c56fb4bc5f0 118
nexpaq 0:6c56fb4bc5f0 119 float ADXL345::getTapLatency(void) {
nexpaq 0:6c56fb4bc5f0 120
nexpaq 0:6c56fb4bc5f0 121 return oneByteRead(ADXL345_LATENT_REG)*1.25;
nexpaq 0:6c56fb4bc5f0 122
nexpaq 0:6c56fb4bc5f0 123 }
nexpaq 0:6c56fb4bc5f0 124
nexpaq 0:6c56fb4bc5f0 125 void ADXL345::setTapLatency(int latency_ms) {
nexpaq 0:6c56fb4bc5f0 126
nexpaq 0:6c56fb4bc5f0 127 int tapLatency = latency_ms / 1.25;
nexpaq 0:6c56fb4bc5f0 128
nexpaq 0:6c56fb4bc5f0 129 oneByteWrite(ADXL345_LATENT_REG, tapLatency);
nexpaq 0:6c56fb4bc5f0 130
nexpaq 0:6c56fb4bc5f0 131 }
nexpaq 0:6c56fb4bc5f0 132
nexpaq 0:6c56fb4bc5f0 133 float ADXL345::getWindowTime(void) {
nexpaq 0:6c56fb4bc5f0 134
nexpaq 0:6c56fb4bc5f0 135 return oneByteRead(ADXL345_WINDOW_REG)*1.25;
nexpaq 0:6c56fb4bc5f0 136
nexpaq 0:6c56fb4bc5f0 137 }
nexpaq 0:6c56fb4bc5f0 138
nexpaq 0:6c56fb4bc5f0 139 void ADXL345::setWindowTime(int window_ms) {
nexpaq 0:6c56fb4bc5f0 140
nexpaq 0:6c56fb4bc5f0 141 int windowTime = window_ms / 1.25;
nexpaq 0:6c56fb4bc5f0 142
nexpaq 0:6c56fb4bc5f0 143 oneByteWrite(ADXL345_WINDOW_REG, windowTime);
nexpaq 0:6c56fb4bc5f0 144
nexpaq 0:6c56fb4bc5f0 145 }
nexpaq 0:6c56fb4bc5f0 146
nexpaq 0:6c56fb4bc5f0 147 int ADXL345::getActivityThreshold(void) {
nexpaq 0:6c56fb4bc5f0 148
nexpaq 0:6c56fb4bc5f0 149 return oneByteRead(ADXL345_THRESH_ACT_REG);
nexpaq 0:6c56fb4bc5f0 150
nexpaq 0:6c56fb4bc5f0 151 }
nexpaq 0:6c56fb4bc5f0 152
nexpaq 0:6c56fb4bc5f0 153 void ADXL345::setActivityThreshold(int threshold) {
nexpaq 0:6c56fb4bc5f0 154
nexpaq 0:6c56fb4bc5f0 155 oneByteWrite(ADXL345_THRESH_ACT_REG, threshold);
nexpaq 0:6c56fb4bc5f0 156
nexpaq 0:6c56fb4bc5f0 157 }
nexpaq 0:6c56fb4bc5f0 158
nexpaq 0:6c56fb4bc5f0 159 int ADXL345::getInactivityThreshold(void) {
nexpaq 0:6c56fb4bc5f0 160
nexpaq 0:6c56fb4bc5f0 161 return oneByteRead(ADXL345_THRESH_INACT_REG);
nexpaq 0:6c56fb4bc5f0 162
nexpaq 0:6c56fb4bc5f0 163 }
nexpaq 0:6c56fb4bc5f0 164
nexpaq 0:6c56fb4bc5f0 165 void ADXL345::setInactivityThreshold(int threshold) {
nexpaq 0:6c56fb4bc5f0 166
nexpaq 0:6c56fb4bc5f0 167 return oneByteWrite(ADXL345_THRESH_INACT_REG, threshold);
nexpaq 0:6c56fb4bc5f0 168
nexpaq 0:6c56fb4bc5f0 169 }
nexpaq 0:6c56fb4bc5f0 170
nexpaq 0:6c56fb4bc5f0 171 int ADXL345::getTimeInactivity(void) {
nexpaq 0:6c56fb4bc5f0 172
nexpaq 0:6c56fb4bc5f0 173 return oneByteRead(ADXL345_TIME_INACT_REG);
nexpaq 0:6c56fb4bc5f0 174
nexpaq 0:6c56fb4bc5f0 175 }
nexpaq 0:6c56fb4bc5f0 176
nexpaq 0:6c56fb4bc5f0 177 void ADXL345::setTimeInactivity(int timeInactivity) {
nexpaq 0:6c56fb4bc5f0 178
nexpaq 0:6c56fb4bc5f0 179 oneByteWrite(ADXL345_TIME_INACT_REG, timeInactivity);
nexpaq 0:6c56fb4bc5f0 180
nexpaq 0:6c56fb4bc5f0 181 }
nexpaq 0:6c56fb4bc5f0 182
nexpaq 0:6c56fb4bc5f0 183 int ADXL345::getActivityInactivityControl(void) {
nexpaq 0:6c56fb4bc5f0 184
nexpaq 0:6c56fb4bc5f0 185 return oneByteRead(ADXL345_ACT_INACT_CTL_REG);
nexpaq 0:6c56fb4bc5f0 186
nexpaq 0:6c56fb4bc5f0 187 }
nexpaq 0:6c56fb4bc5f0 188
nexpaq 0:6c56fb4bc5f0 189 void ADXL345::setActivityInactivityControl(int settings) {
nexpaq 0:6c56fb4bc5f0 190
nexpaq 0:6c56fb4bc5f0 191 oneByteWrite(ADXL345_ACT_INACT_CTL_REG, settings);
nexpaq 0:6c56fb4bc5f0 192
nexpaq 0:6c56fb4bc5f0 193 }
nexpaq 0:6c56fb4bc5f0 194
nexpaq 0:6c56fb4bc5f0 195 int ADXL345::getFreefallThreshold(void) {
nexpaq 0:6c56fb4bc5f0 196
nexpaq 0:6c56fb4bc5f0 197 return oneByteRead(ADXL345_THRESH_FF_REG);
nexpaq 0:6c56fb4bc5f0 198
nexpaq 0:6c56fb4bc5f0 199 }
nexpaq 0:6c56fb4bc5f0 200
nexpaq 0:6c56fb4bc5f0 201 void ADXL345::setFreefallThreshold(int threshold) {
nexpaq 0:6c56fb4bc5f0 202
nexpaq 0:6c56fb4bc5f0 203 oneByteWrite(ADXL345_THRESH_FF_REG, threshold);
nexpaq 0:6c56fb4bc5f0 204
nexpaq 0:6c56fb4bc5f0 205 }
nexpaq 0:6c56fb4bc5f0 206
nexpaq 0:6c56fb4bc5f0 207 int ADXL345::getFreefallTime(void) {
nexpaq 0:6c56fb4bc5f0 208
nexpaq 0:6c56fb4bc5f0 209 return oneByteRead(ADXL345_TIME_FF_REG)*5;
nexpaq 0:6c56fb4bc5f0 210
nexpaq 0:6c56fb4bc5f0 211 }
nexpaq 0:6c56fb4bc5f0 212
nexpaq 0:6c56fb4bc5f0 213 void ADXL345::setFreefallTime(int freefallTime_ms) {
nexpaq 0:6c56fb4bc5f0 214
nexpaq 0:6c56fb4bc5f0 215 int freefallTime = freefallTime_ms / 5;
nexpaq 0:6c56fb4bc5f0 216
nexpaq 0:6c56fb4bc5f0 217 oneByteWrite(ADXL345_TIME_FF_REG, freefallTime);
nexpaq 0:6c56fb4bc5f0 218
nexpaq 0:6c56fb4bc5f0 219 }
nexpaq 0:6c56fb4bc5f0 220
nexpaq 0:6c56fb4bc5f0 221 int ADXL345::getTapAxisControl(void) {
nexpaq 0:6c56fb4bc5f0 222
nexpaq 0:6c56fb4bc5f0 223 return oneByteRead(ADXL345_TAP_AXES_REG);
nexpaq 0:6c56fb4bc5f0 224
nexpaq 0:6c56fb4bc5f0 225 }
nexpaq 0:6c56fb4bc5f0 226
nexpaq 0:6c56fb4bc5f0 227 void ADXL345::setTapAxisControl(int settings) {
nexpaq 0:6c56fb4bc5f0 228
nexpaq 0:6c56fb4bc5f0 229 oneByteWrite(ADXL345_TAP_AXES_REG, settings);
nexpaq 0:6c56fb4bc5f0 230
nexpaq 0:6c56fb4bc5f0 231 }
nexpaq 0:6c56fb4bc5f0 232
nexpaq 0:6c56fb4bc5f0 233 int ADXL345::getTapSource(void) {
nexpaq 0:6c56fb4bc5f0 234
nexpaq 0:6c56fb4bc5f0 235 return oneByteRead(ADXL345_ACT_TAP_STATUS_REG);
nexpaq 0:6c56fb4bc5f0 236
nexpaq 0:6c56fb4bc5f0 237 }
nexpaq 0:6c56fb4bc5f0 238
nexpaq 0:6c56fb4bc5f0 239 void ADXL345::setPowerMode(char mode) {
nexpaq 0:6c56fb4bc5f0 240
nexpaq 0:6c56fb4bc5f0 241 //Get the current register contents, so we don't clobber the rate value.
nexpaq 0:6c56fb4bc5f0 242 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
nexpaq 0:6c56fb4bc5f0 243
nexpaq 0:6c56fb4bc5f0 244 registerContents = (mode << 4) | registerContents;
nexpaq 0:6c56fb4bc5f0 245
nexpaq 0:6c56fb4bc5f0 246 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
nexpaq 0:6c56fb4bc5f0 247
nexpaq 0:6c56fb4bc5f0 248 }
nexpaq 0:6c56fb4bc5f0 249
nexpaq 0:6c56fb4bc5f0 250 int ADXL345::getPowerControl(void) {
nexpaq 0:6c56fb4bc5f0 251
nexpaq 0:6c56fb4bc5f0 252 return oneByteRead(ADXL345_POWER_CTL_REG);
nexpaq 0:6c56fb4bc5f0 253
nexpaq 0:6c56fb4bc5f0 254 }
nexpaq 0:6c56fb4bc5f0 255
nexpaq 0:6c56fb4bc5f0 256 void ADXL345::setPowerControl(int settings) {
nexpaq 0:6c56fb4bc5f0 257
nexpaq 0:6c56fb4bc5f0 258 oneByteWrite(ADXL345_POWER_CTL_REG, settings);
nexpaq 0:6c56fb4bc5f0 259
nexpaq 0:6c56fb4bc5f0 260 }
nexpaq 0:6c56fb4bc5f0 261
nexpaq 0:6c56fb4bc5f0 262 int ADXL345::getInterruptEnableControl(void) {
nexpaq 0:6c56fb4bc5f0 263
nexpaq 0:6c56fb4bc5f0 264 return oneByteRead(ADXL345_INT_ENABLE_REG);
nexpaq 0:6c56fb4bc5f0 265
nexpaq 0:6c56fb4bc5f0 266 }
nexpaq 0:6c56fb4bc5f0 267
nexpaq 0:6c56fb4bc5f0 268 void ADXL345::setInterruptEnableControl(int settings) {
nexpaq 0:6c56fb4bc5f0 269
nexpaq 0:6c56fb4bc5f0 270 oneByteWrite(ADXL345_INT_ENABLE_REG, settings);
nexpaq 0:6c56fb4bc5f0 271
nexpaq 0:6c56fb4bc5f0 272 }
nexpaq 0:6c56fb4bc5f0 273
nexpaq 0:6c56fb4bc5f0 274 int ADXL345::getInterruptMappingControl(void) {
nexpaq 0:6c56fb4bc5f0 275
nexpaq 0:6c56fb4bc5f0 276 return oneByteRead(ADXL345_INT_MAP_REG);
nexpaq 0:6c56fb4bc5f0 277
nexpaq 0:6c56fb4bc5f0 278 }
nexpaq 0:6c56fb4bc5f0 279
nexpaq 0:6c56fb4bc5f0 280 void ADXL345::setInterruptMappingControl(int settings) {
nexpaq 0:6c56fb4bc5f0 281
nexpaq 0:6c56fb4bc5f0 282 oneByteWrite(ADXL345_INT_MAP_REG, settings);
nexpaq 0:6c56fb4bc5f0 283
nexpaq 0:6c56fb4bc5f0 284 }
nexpaq 0:6c56fb4bc5f0 285
nexpaq 0:6c56fb4bc5f0 286 int ADXL345::getInterruptSource(void){
nexpaq 0:6c56fb4bc5f0 287
nexpaq 0:6c56fb4bc5f0 288 return oneByteRead(ADXL345_INT_SOURCE_REG);
nexpaq 0:6c56fb4bc5f0 289
nexpaq 0:6c56fb4bc5f0 290 }
nexpaq 0:6c56fb4bc5f0 291
nexpaq 0:6c56fb4bc5f0 292 int ADXL345::getDataFormatControl(void){
nexpaq 0:6c56fb4bc5f0 293
nexpaq 0:6c56fb4bc5f0 294 return oneByteRead(ADXL345_DATA_FORMAT_REG);
nexpaq 0:6c56fb4bc5f0 295
nexpaq 0:6c56fb4bc5f0 296 }
nexpaq 0:6c56fb4bc5f0 297
nexpaq 0:6c56fb4bc5f0 298 void ADXL345::setDataFormatControl(int settings){
nexpaq 0:6c56fb4bc5f0 299
nexpaq 0:6c56fb4bc5f0 300 oneByteWrite(ADXL345_DATA_FORMAT_REG, settings);
nexpaq 0:6c56fb4bc5f0 301
nexpaq 0:6c56fb4bc5f0 302 }
nexpaq 0:6c56fb4bc5f0 303
nexpaq 0:6c56fb4bc5f0 304 void ADXL345::setDataRate(int rate) {
nexpaq 0:6c56fb4bc5f0 305
nexpaq 0:6c56fb4bc5f0 306 //Get the current register contents, so we don't clobber the power bit.
nexpaq 0:6c56fb4bc5f0 307 char registerContents = oneByteRead(ADXL345_BW_RATE_REG);
nexpaq 0:6c56fb4bc5f0 308
nexpaq 0:6c56fb4bc5f0 309 registerContents &= 0x10;
nexpaq 0:6c56fb4bc5f0 310 registerContents |= rate;
nexpaq 0:6c56fb4bc5f0 311
nexpaq 0:6c56fb4bc5f0 312 oneByteWrite(ADXL345_BW_RATE_REG, registerContents);
nexpaq 0:6c56fb4bc5f0 313
nexpaq 0:6c56fb4bc5f0 314 }
nexpaq 0:6c56fb4bc5f0 315
nexpaq 0:6c56fb4bc5f0 316 void ADXL345::getOutput(int* readings){
nexpaq 0:6c56fb4bc5f0 317
nexpaq 0:6c56fb4bc5f0 318 char buffer[6];
nexpaq 0:6c56fb4bc5f0 319
nexpaq 0:6c56fb4bc5f0 320 multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
nexpaq 0:6c56fb4bc5f0 321
nexpaq 0:6c56fb4bc5f0 322 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
nexpaq 0:6c56fb4bc5f0 323 readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
nexpaq 0:6c56fb4bc5f0 324 readings[2] = (int)buffer[5] << 8 | (int)buffer[4];
nexpaq 0:6c56fb4bc5f0 325
nexpaq 0:6c56fb4bc5f0 326 }
nexpaq 0:6c56fb4bc5f0 327
nexpaq 0:6c56fb4bc5f0 328 int ADXL345::getFifoControl(void){
nexpaq 0:6c56fb4bc5f0 329
nexpaq 0:6c56fb4bc5f0 330 return oneByteRead(ADXL345_FIFO_CTL);
nexpaq 0:6c56fb4bc5f0 331
nexpaq 0:6c56fb4bc5f0 332 }
nexpaq 0:6c56fb4bc5f0 333
nexpaq 0:6c56fb4bc5f0 334 void ADXL345::setFifoControl(int settings){
nexpaq 0:6c56fb4bc5f0 335
nexpaq 0:6c56fb4bc5f0 336 oneByteWrite(ADXL345_FIFO_STATUS, settings);
nexpaq 0:6c56fb4bc5f0 337
nexpaq 0:6c56fb4bc5f0 338 }
nexpaq 0:6c56fb4bc5f0 339
nexpaq 0:6c56fb4bc5f0 340 int ADXL345::getFifoStatus(void){
nexpaq 0:6c56fb4bc5f0 341
nexpaq 0:6c56fb4bc5f0 342 return oneByteRead(ADXL345_FIFO_STATUS);
nexpaq 0:6c56fb4bc5f0 343
nexpaq 0:6c56fb4bc5f0 344 }
nexpaq 0:6c56fb4bc5f0 345
nexpaq 0:6c56fb4bc5f0 346 int ADXL345::oneByteRead(int address) {
nexpaq 0:6c56fb4bc5f0 347
nexpaq 0:6c56fb4bc5f0 348 int tx = (ADXL345_SPI_READ | (address & 0x3F));
nexpaq 0:6c56fb4bc5f0 349 int rx = 0;
nexpaq 0:6c56fb4bc5f0 350
nexpaq 0:6c56fb4bc5f0 351 nCS_ = 0;
nexpaq 0:6c56fb4bc5f0 352 //Send address to read from.
nexpaq 0:6c56fb4bc5f0 353 spi_.write(tx);
nexpaq 0:6c56fb4bc5f0 354 //Read back contents of address.
nexpaq 0:6c56fb4bc5f0 355 rx = spi_.write(0x00);
nexpaq 0:6c56fb4bc5f0 356 nCS_ = 1;
nexpaq 0:6c56fb4bc5f0 357
nexpaq 0:6c56fb4bc5f0 358 return rx;
nexpaq 0:6c56fb4bc5f0 359
nexpaq 0:6c56fb4bc5f0 360 }
nexpaq 0:6c56fb4bc5f0 361
nexpaq 0:6c56fb4bc5f0 362 void ADXL345::oneByteWrite(int address, char data) {
nexpaq 0:6c56fb4bc5f0 363
nexpaq 0:6c56fb4bc5f0 364 int tx = (ADXL345_SPI_WRITE | (address & 0x3F));
nexpaq 0:6c56fb4bc5f0 365
nexpaq 0:6c56fb4bc5f0 366 nCS_ = 0;
nexpaq 0:6c56fb4bc5f0 367 //Send address to write to.
nexpaq 0:6c56fb4bc5f0 368 spi_.write(tx);
nexpaq 0:6c56fb4bc5f0 369 //Send data to be written.
nexpaq 0:6c56fb4bc5f0 370 spi_.write(data);
nexpaq 0:6c56fb4bc5f0 371 nCS_ = 1;
nexpaq 0:6c56fb4bc5f0 372
nexpaq 0:6c56fb4bc5f0 373 }
nexpaq 0:6c56fb4bc5f0 374
nexpaq 0:6c56fb4bc5f0 375 void ADXL345::multiByteRead(int startAddress, char* buffer, int size) {
nexpaq 0:6c56fb4bc5f0 376
nexpaq 0:6c56fb4bc5f0 377 int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
nexpaq 0:6c56fb4bc5f0 378
nexpaq 0:6c56fb4bc5f0 379 nCS_ = 0;
nexpaq 0:6c56fb4bc5f0 380 //Send address to start reading from.
nexpaq 0:6c56fb4bc5f0 381 spi_.write(tx);
nexpaq 0:6c56fb4bc5f0 382
nexpaq 0:6c56fb4bc5f0 383 for (int i = 0; i < size; i++) {
nexpaq 0:6c56fb4bc5f0 384 buffer[i] = spi_.write(0x00);
nexpaq 0:6c56fb4bc5f0 385 }
nexpaq 0:6c56fb4bc5f0 386
nexpaq 0:6c56fb4bc5f0 387 nCS_ = 1;
nexpaq 0:6c56fb4bc5f0 388
nexpaq 0:6c56fb4bc5f0 389 }
nexpaq 0:6c56fb4bc5f0 390
nexpaq 0:6c56fb4bc5f0 391 void ADXL345::multiByteWrite(int startAddress, char* buffer, int size) {
nexpaq 0:6c56fb4bc5f0 392
nexpaq 0:6c56fb4bc5f0 393 int tx = (ADXL345_SPI_WRITE | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
nexpaq 0:6c56fb4bc5f0 394
nexpaq 0:6c56fb4bc5f0 395 nCS_ = 0;
nexpaq 0:6c56fb4bc5f0 396 //Send address to start reading from.
nexpaq 0:6c56fb4bc5f0 397 spi_.write(tx);
nexpaq 0:6c56fb4bc5f0 398
nexpaq 0:6c56fb4bc5f0 399 for (int i = 0; i < size; i++) {
nexpaq 0:6c56fb4bc5f0 400 buffer[i] = spi_.write(0x00);
nexpaq 0:6c56fb4bc5f0 401 }
nexpaq 0:6c56fb4bc5f0 402
nexpaq 0:6c56fb4bc5f0 403 nCS_ = 1;
nexpaq 0:6c56fb4bc5f0 404
nexpaq 0:6c56fb4bc5f0 405 }