teste

Committer:
goncaloc
Date:
Sun Oct 31 10:59:35 2010 +0000
Revision:
0:a5a2383a6e2f
0v0

Who changed what in which revision?

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