2/24 操舵翼端

Fork of ADXL345_I2C by Ian Molesworth

Committer:
taurin
Date:
Wed Feb 24 10:21:07 2016 +0000
Revision:
2:732904bc32c3
Parent:
0:3957077e9775
2/24 ????;

Who changed what in which revision?

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