mbed implementation of the FreeIMU IMU for HobbyKing's 10DOF board

Dependents:   testHK10DOF

Committer:
pommzorz
Date:
Wed Jul 17 18:53:37 2013 +0000
Revision:
1:85fcfcb7b137
Parent:
0:9a1682a09c50
oops forgot one file...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pommzorz 0:9a1682a09c50 1 /**
pommzorz 0:9a1682a09c50 2 * @author Peter Swanson
pommzorz 0:9a1682a09c50 3 * A personal note from me: Jesus Christ has changed my life so much it blows my mind. I say this because
pommzorz 0:9a1682a09c50 4 * today, religion is thought of as something that you do or believe and has about as
pommzorz 0:9a1682a09c50 5 * little impact on a person as their political stance. But for me, God gives me daily
pommzorz 0:9a1682a09c50 6 * strength and has filled my life with the satisfaction that I could never find in any
pommzorz 0:9a1682a09c50 7 * of the other things that I once looked for it in.
pommzorz 0:9a1682a09c50 8 * If your interested, heres verse that changed my life:
pommzorz 0:9a1682a09c50 9 * Rom 8:1-3: "Therefore, there is now no condemnation for those who are in Christ Jesus,
pommzorz 0:9a1682a09c50 10 * because through Christ Jesus, the law of the Spirit who gives life has set
pommzorz 0:9a1682a09c50 11 * me free from the law of sin (which brings...) and death. For what the law
pommzorz 0:9a1682a09c50 12 * was powerless to do in that it was weakened by the flesh, God did by sending
pommzorz 0:9a1682a09c50 13 * His own Son in the likeness of sinful flesh to be a sin offering. And so He
pommzorz 0:9a1682a09c50 14 * condemned sin in the flesh in order that the righteous requirements of the
pommzorz 0:9a1682a09c50 15 * (God's) law might be fully met in us, who live not according to the flesh
pommzorz 0:9a1682a09c50 16 * but according to the Spirit."
pommzorz 0:9a1682a09c50 17 *
pommzorz 0:9a1682a09c50 18 * A special thanks to Ewout van Bekkum for all his patient help in developing this library!
pommzorz 0:9a1682a09c50 19 *
pommzorz 0:9a1682a09c50 20 * @section LICENSE
pommzorz 0:9a1682a09c50 21 *
pommzorz 0:9a1682a09c50 22 * Permission is hereby granted, free of charge, to any person obtaining a copy
pommzorz 0:9a1682a09c50 23 * of this software and associated documentation files (the "Software"), to deal
pommzorz 0:9a1682a09c50 24 * in the Software without restriction, including without limitation the rights
pommzorz 0:9a1682a09c50 25 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
pommzorz 0:9a1682a09c50 26 * copies of the Software, and to permit persons to whom the Software is
pommzorz 0:9a1682a09c50 27 * furnished to do so, subject to the following conditions:
pommzorz 0:9a1682a09c50 28 *
pommzorz 0:9a1682a09c50 29 * The above copyright notice and this permission notice shall be included in
pommzorz 0:9a1682a09c50 30 * all copies or substantial portions of the Software.
pommzorz 0:9a1682a09c50 31 *
pommzorz 0:9a1682a09c50 32 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
pommzorz 0:9a1682a09c50 33 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
pommzorz 0:9a1682a09c50 34 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
pommzorz 0:9a1682a09c50 35 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
pommzorz 0:9a1682a09c50 36 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
pommzorz 0:9a1682a09c50 37 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
pommzorz 0:9a1682a09c50 38 * THE SOFTWARE.
pommzorz 0:9a1682a09c50 39 *
pommzorz 0:9a1682a09c50 40 * @section DESCRIPTION
pommzorz 0:9a1682a09c50 41 *
pommzorz 0:9a1682a09c50 42 * ADXL345, triple axis, I2C interface, accelerometer.
pommzorz 0:9a1682a09c50 43 *
pommzorz 0:9a1682a09c50 44 * Datasheet:
pommzorz 0:9a1682a09c50 45 *
pommzorz 0:9a1682a09c50 46 * http://www.analog.com/static/imported-files/data_sheets/ADXL345.pdf
pommzorz 0:9a1682a09c50 47 */
pommzorz 0:9a1682a09c50 48
pommzorz 0:9a1682a09c50 49 /**
pommzorz 0:9a1682a09c50 50 * Includes
pommzorz 0:9a1682a09c50 51 */
pommzorz 0:9a1682a09c50 52 #include "ADXL345_I2C.h"
pommzorz 0:9a1682a09c50 53
pommzorz 0:9a1682a09c50 54 //#include "mbed.h"
pommzorz 0:9a1682a09c50 55
pommzorz 0:9a1682a09c50 56 ADXL345_I2C::ADXL345_I2C(PinName sda, PinName scl) : i2c_(sda, scl) {
pommzorz 0:9a1682a09c50 57
pommzorz 0:9a1682a09c50 58 //400kHz, allowing us to use the fastest data rates.
pommzorz 0:9a1682a09c50 59 i2c_.frequency(400000); //400000
pommzorz 0:9a1682a09c50 60 // initialize the BW data rate
pommzorz 0:9a1682a09c50 61 char tx[2];
pommzorz 0:9a1682a09c50 62 tx[0] = ADXL345_BW_RATE_REG;
pommzorz 0:9a1682a09c50 63 tx[1] = ADXL345_1600HZ; //value greater than or equal to 0x0A is written into the rate bits (Bit D3 through Bit D0) in the BW_RATE register
pommzorz 0:9a1682a09c50 64 i2c_.write( ADXL345_I2C_WRITE , tx, 2);
pommzorz 0:9a1682a09c50 65
pommzorz 0:9a1682a09c50 66 //Data format (for +-16g) - This is done by setting Bit D3 of the DATA_FORMAT register (Address 0x31) and writing a value of 0x03 to the range bits (Bit D1 and Bit D0) of the DATA_FORMAT register (Address 0x31).
pommzorz 0:9a1682a09c50 67
pommzorz 0:9a1682a09c50 68 char rx[2];
pommzorz 0:9a1682a09c50 69 rx[0] = ADXL345_DATA_FORMAT_REG;
pommzorz 0:9a1682a09c50 70 rx[1] = 0x0B;
pommzorz 0:9a1682a09c50 71 // full res and +_16g
pommzorz 0:9a1682a09c50 72 i2c_.write( ADXL345_I2C_WRITE , rx, 2);
pommzorz 0:9a1682a09c50 73
pommzorz 0:9a1682a09c50 74 // Set Offset - programmed into the OFSX, OFSY, and OFXZ registers, respectively, as 0xFD, 0x03 and 0xFE.
pommzorz 0:9a1682a09c50 75 char x[2];
pommzorz 0:9a1682a09c50 76 x[0] = ADXL345_OFSX_REG ;
pommzorz 0:9a1682a09c50 77 x[1] = 0xFD;
pommzorz 0:9a1682a09c50 78 i2c_.write( ADXL345_I2C_WRITE , x, 2);
pommzorz 0:9a1682a09c50 79 char y[2];
pommzorz 0:9a1682a09c50 80 y[0] = ADXL345_OFSY_REG ;
pommzorz 0:9a1682a09c50 81 y[1] = 0x03;
pommzorz 0:9a1682a09c50 82 i2c_.write( ADXL345_I2C_WRITE , y, 2);
pommzorz 0:9a1682a09c50 83 char z[2];
pommzorz 0:9a1682a09c50 84 z[0] = ADXL345_OFSZ_REG ;
pommzorz 0:9a1682a09c50 85 z[1] = 0xFE;
pommzorz 0:9a1682a09c50 86 i2c_.write( ADXL345_I2C_WRITE , z, 2);
pommzorz 0:9a1682a09c50 87 }
pommzorz 0:9a1682a09c50 88
pommzorz 0:9a1682a09c50 89
pommzorz 0:9a1682a09c50 90 char ADXL345_I2C::SingleByteRead(char address){
pommzorz 0:9a1682a09c50 91 char tx = address;
pommzorz 0:9a1682a09c50 92 char output;
pommzorz 0:9a1682a09c50 93 i2c_.write( ADXL345_I2C_WRITE , &tx, 1); //tell it what you want to read
pommzorz 0:9a1682a09c50 94 i2c_.read( ADXL345_I2C_READ , &output, 1); //tell it where to store the data
pommzorz 0:9a1682a09c50 95 return output;
pommzorz 0:9a1682a09c50 96
pommzorz 0:9a1682a09c50 97 }
pommzorz 0:9a1682a09c50 98
pommzorz 0:9a1682a09c50 99
pommzorz 0:9a1682a09c50 100 /*
pommzorz 0:9a1682a09c50 101 ***info on the i2c_.write***
pommzorz 0:9a1682a09c50 102 address 8-bit I2C slave address [ addr | 0 ]
pommzorz 0:9a1682a09c50 103 data Pointer to the byte-array data to send
pommzorz 0:9a1682a09c50 104 length Number of bytes to send
pommzorz 0:9a1682a09c50 105 repeated Repeated start, true - do not send stop at end
pommzorz 0:9a1682a09c50 106 returns 0 on success (ack), or non-0 on failure (nack)
pommzorz 0:9a1682a09c50 107 */
pommzorz 0:9a1682a09c50 108
pommzorz 0:9a1682a09c50 109 int ADXL345_I2C::SingleByteWrite(char address, char data){
pommzorz 0:9a1682a09c50 110 int ack = 0;
pommzorz 0:9a1682a09c50 111 char tx[2];
pommzorz 0:9a1682a09c50 112 tx[0] = address;
pommzorz 0:9a1682a09c50 113 tx[1] = data;
pommzorz 0:9a1682a09c50 114 return ack | i2c_.write( ADXL345_I2C_WRITE , tx, 2);
pommzorz 0:9a1682a09c50 115 }
pommzorz 0:9a1682a09c50 116
pommzorz 0:9a1682a09c50 117
pommzorz 0:9a1682a09c50 118
pommzorz 0:9a1682a09c50 119 void ADXL345_I2C::multiByteRead(char address, char* output, int size) {
pommzorz 0:9a1682a09c50 120 i2c_.write( ADXL345_I2C_WRITE, &address, 1); //tell it where to read from
pommzorz 0:9a1682a09c50 121 i2c_.read( ADXL345_I2C_READ , output, size); //tell it where to store the data read
pommzorz 0:9a1682a09c50 122 }
pommzorz 0:9a1682a09c50 123
pommzorz 0:9a1682a09c50 124
pommzorz 0:9a1682a09c50 125 int ADXL345_I2C::multiByteWrite(char address, char* ptr_data, int size) {
pommzorz 0:9a1682a09c50 126 int ack;
pommzorz 0:9a1682a09c50 127
pommzorz 0:9a1682a09c50 128 ack = i2c_.write( ADXL345_I2C_WRITE, &address, 1); //tell it where to write to
pommzorz 0:9a1682a09c50 129 return ack | i2c_.write( ADXL345_I2C_READ, ptr_data, size); //tell it what data to write
pommzorz 0:9a1682a09c50 130
pommzorz 0:9a1682a09c50 131 }
pommzorz 0:9a1682a09c50 132
pommzorz 0:9a1682a09c50 133
pommzorz 0:9a1682a09c50 134 void ADXL345_I2C::getOutput(int16_t* readings){
pommzorz 0:9a1682a09c50 135 char buffer[6];
pommzorz 0:9a1682a09c50 136 multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
pommzorz 0:9a1682a09c50 137
pommzorz 0:9a1682a09c50 138 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
pommzorz 0:9a1682a09c50 139 readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
pommzorz 0:9a1682a09c50 140 readings[2] = (int)buffer[5] << 8 | (int)buffer[4];
pommzorz 0:9a1682a09c50 141
pommzorz 0:9a1682a09c50 142 }
pommzorz 0:9a1682a09c50 143
pommzorz 0:9a1682a09c50 144 /*
pommzorz 0:9a1682a09c50 145
pommzorz 0:9a1682a09c50 146 void ADXL345_I2C::getOutput(int* readings){
pommzorz 0:9a1682a09c50 147 char buffer[6];
pommzorz 0:9a1682a09c50 148 multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
pommzorz 0:9a1682a09c50 149
pommzorz 0:9a1682a09c50 150 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
pommzorz 0:9a1682a09c50 151 readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
pommzorz 0:9a1682a09c50 152 readings[2] = (int)buffer[5] << 8 | (int)buffer[4];
pommzorz 0:9a1682a09c50 153
pommzorz 0:9a1682a09c50 154 }
pommzorz 0:9a1682a09c50 155 */
pommzorz 0:9a1682a09c50 156
pommzorz 0:9a1682a09c50 157 void ADXL345_I2C::getOutput(int16_t* x, int16_t* y, int16_t* z) {
pommzorz 0:9a1682a09c50 158 int16_t *readings;
pommzorz 0:9a1682a09c50 159 getOutput(readings);
pommzorz 0:9a1682a09c50 160
pommzorz 0:9a1682a09c50 161 // each axis reading comes in 10 bit resolution, ie 2 bytes. Least Significat Byte first!!
pommzorz 0:9a1682a09c50 162 // thus we are converting both bytes in to one int
pommzorz 0:9a1682a09c50 163 *x = readings[0];
pommzorz 0:9a1682a09c50 164 *y = readings[1];
pommzorz 0:9a1682a09c50 165 *z = readings[2];
pommzorz 0:9a1682a09c50 166 }
pommzorz 0:9a1682a09c50 167
pommzorz 0:9a1682a09c50 168
pommzorz 0:9a1682a09c50 169 char ADXL345_I2C::getDeviceID() {
pommzorz 0:9a1682a09c50 170 return SingleByteRead(ADXL345_DEVID_REG);
pommzorz 0:9a1682a09c50 171 }
pommzorz 0:9a1682a09c50 172 //
pommzorz 0:9a1682a09c50 173 int ADXL345_I2C::setPowerMode(char mode) {
pommzorz 0:9a1682a09c50 174
pommzorz 0:9a1682a09c50 175 //Get the current register contents, so we don't clobber the rate value.
pommzorz 0:9a1682a09c50 176 char registerContents = (mode << 4) | SingleByteRead(ADXL345_BW_RATE_REG);
pommzorz 0:9a1682a09c50 177
pommzorz 0:9a1682a09c50 178 return SingleByteWrite(ADXL345_BW_RATE_REG, registerContents);
pommzorz 0:9a1682a09c50 179
pommzorz 0:9a1682a09c50 180 }
pommzorz 0:9a1682a09c50 181
pommzorz 0:9a1682a09c50 182 char ADXL345_I2C::getPowerControl() {
pommzorz 0:9a1682a09c50 183 return SingleByteRead(ADXL345_POWER_CTL_REG);
pommzorz 0:9a1682a09c50 184 }
pommzorz 0:9a1682a09c50 185
pommzorz 0:9a1682a09c50 186 int ADXL345_I2C::setPowerControl(char settings) {
pommzorz 0:9a1682a09c50 187 return SingleByteWrite(ADXL345_POWER_CTL_REG, settings);
pommzorz 0:9a1682a09c50 188
pommzorz 0:9a1682a09c50 189 }
pommzorz 0:9a1682a09c50 190
pommzorz 0:9a1682a09c50 191
pommzorz 0:9a1682a09c50 192
pommzorz 0:9a1682a09c50 193 char ADXL345_I2C::getDataFormatControl(void){
pommzorz 0:9a1682a09c50 194
pommzorz 0:9a1682a09c50 195 return SingleByteRead(ADXL345_DATA_FORMAT_REG);
pommzorz 0:9a1682a09c50 196 }
pommzorz 0:9a1682a09c50 197
pommzorz 0:9a1682a09c50 198 int ADXL345_I2C::setDataFormatControl(char settings){
pommzorz 0:9a1682a09c50 199
pommzorz 0:9a1682a09c50 200 return SingleByteWrite(ADXL345_DATA_FORMAT_REG, settings);
pommzorz 0:9a1682a09c50 201
pommzorz 0:9a1682a09c50 202 }
pommzorz 0:9a1682a09c50 203
pommzorz 0:9a1682a09c50 204 int ADXL345_I2C::setDataRate(char rate) {
pommzorz 0:9a1682a09c50 205
pommzorz 0:9a1682a09c50 206 //Get the current register contents, so we don't clobber the power bit.
pommzorz 0:9a1682a09c50 207 char registerContents = SingleByteRead(ADXL345_BW_RATE_REG);
pommzorz 0:9a1682a09c50 208
pommzorz 0:9a1682a09c50 209 registerContents &= 0x10;
pommzorz 0:9a1682a09c50 210 registerContents |= rate;
pommzorz 0:9a1682a09c50 211
pommzorz 0:9a1682a09c50 212 return SingleByteWrite(ADXL345_BW_RATE_REG, registerContents);
pommzorz 0:9a1682a09c50 213
pommzorz 0:9a1682a09c50 214 }
pommzorz 0:9a1682a09c50 215
pommzorz 0:9a1682a09c50 216
pommzorz 0:9a1682a09c50 217 char ADXL345_I2C::getOffset(char axis) {
pommzorz 0:9a1682a09c50 218
pommzorz 0:9a1682a09c50 219 char address = 0;
pommzorz 0:9a1682a09c50 220
pommzorz 0:9a1682a09c50 221 if (axis == ADXL345_X) {
pommzorz 0:9a1682a09c50 222 address = ADXL345_OFSX_REG;
pommzorz 0:9a1682a09c50 223 } else if (axis == ADXL345_Y) {
pommzorz 0:9a1682a09c50 224 address = ADXL345_OFSY_REG;
pommzorz 0:9a1682a09c50 225 } else if (axis == ADXL345_Z) {
pommzorz 0:9a1682a09c50 226 address = ADXL345_OFSZ_REG;
pommzorz 0:9a1682a09c50 227 }
pommzorz 0:9a1682a09c50 228
pommzorz 0:9a1682a09c50 229 return SingleByteRead(address);
pommzorz 0:9a1682a09c50 230 }
pommzorz 0:9a1682a09c50 231
pommzorz 0:9a1682a09c50 232 int ADXL345_I2C::setOffset(char axis, char offset) {
pommzorz 0:9a1682a09c50 233
pommzorz 0:9a1682a09c50 234 char address = 0;
pommzorz 0:9a1682a09c50 235
pommzorz 0:9a1682a09c50 236 if (axis == ADXL345_X) {
pommzorz 0:9a1682a09c50 237 address = ADXL345_OFSX_REG;
pommzorz 0:9a1682a09c50 238 } else if (axis == ADXL345_Y) {
pommzorz 0:9a1682a09c50 239 address = ADXL345_OFSY_REG;
pommzorz 0:9a1682a09c50 240 } else if (axis == ADXL345_Z) {
pommzorz 0:9a1682a09c50 241 address = ADXL345_OFSZ_REG;
pommzorz 0:9a1682a09c50 242 }
pommzorz 0:9a1682a09c50 243
pommzorz 0:9a1682a09c50 244 return SingleByteWrite(address, offset);
pommzorz 0:9a1682a09c50 245
pommzorz 0:9a1682a09c50 246 }
pommzorz 0:9a1682a09c50 247
pommzorz 0:9a1682a09c50 248
pommzorz 0:9a1682a09c50 249 char ADXL345_I2C::getFifoControl(void){
pommzorz 0:9a1682a09c50 250
pommzorz 0:9a1682a09c50 251 return SingleByteRead(ADXL345_FIFO_CTL);
pommzorz 0:9a1682a09c50 252
pommzorz 0:9a1682a09c50 253 }
pommzorz 0:9a1682a09c50 254
pommzorz 0:9a1682a09c50 255 int ADXL345_I2C::setFifoControl(char settings){
pommzorz 0:9a1682a09c50 256 return SingleByteWrite(ADXL345_FIFO_STATUS, settings);
pommzorz 0:9a1682a09c50 257
pommzorz 0:9a1682a09c50 258 }
pommzorz 0:9a1682a09c50 259
pommzorz 0:9a1682a09c50 260 char ADXL345_I2C::getFifoStatus(void){
pommzorz 0:9a1682a09c50 261
pommzorz 0:9a1682a09c50 262 return SingleByteRead(ADXL345_FIFO_STATUS);
pommzorz 0:9a1682a09c50 263
pommzorz 0:9a1682a09c50 264 }
pommzorz 0:9a1682a09c50 265
pommzorz 0:9a1682a09c50 266
pommzorz 0:9a1682a09c50 267
pommzorz 0:9a1682a09c50 268 char ADXL345_I2C::getTapThreshold(void) {
pommzorz 0:9a1682a09c50 269
pommzorz 0:9a1682a09c50 270 return SingleByteRead(ADXL345_THRESH_TAP_REG);
pommzorz 0:9a1682a09c50 271 }
pommzorz 0:9a1682a09c50 272
pommzorz 0:9a1682a09c50 273 int ADXL345_I2C::setTapThreshold(char threshold) {
pommzorz 0:9a1682a09c50 274
pommzorz 0:9a1682a09c50 275 return SingleByteWrite(ADXL345_THRESH_TAP_REG, threshold);
pommzorz 0:9a1682a09c50 276
pommzorz 0:9a1682a09c50 277 }
pommzorz 0:9a1682a09c50 278
pommzorz 0:9a1682a09c50 279
pommzorz 0:9a1682a09c50 280 float ADXL345_I2C::getTapDuration(void) {
pommzorz 0:9a1682a09c50 281
pommzorz 0:9a1682a09c50 282 return (float)SingleByteRead(ADXL345_DUR_REG)*625;
pommzorz 0:9a1682a09c50 283 }
pommzorz 0:9a1682a09c50 284
pommzorz 0:9a1682a09c50 285 int ADXL345_I2C::setTapDuration(short int duration_us) {
pommzorz 0:9a1682a09c50 286
pommzorz 0:9a1682a09c50 287 short int tapDuration = duration_us / 625;
pommzorz 0:9a1682a09c50 288 char tapChar[2];
pommzorz 0:9a1682a09c50 289 tapChar[0] = (tapDuration & 0x00FF);
pommzorz 0:9a1682a09c50 290 tapChar[1] = (tapDuration >> 8) & 0x00FF;
pommzorz 0:9a1682a09c50 291 return multiByteWrite(ADXL345_DUR_REG, tapChar, 2);
pommzorz 0:9a1682a09c50 292
pommzorz 0:9a1682a09c50 293 }
pommzorz 0:9a1682a09c50 294
pommzorz 0:9a1682a09c50 295 float ADXL345_I2C::getTapLatency(void) {
pommzorz 0:9a1682a09c50 296
pommzorz 0:9a1682a09c50 297 return (float)SingleByteRead(ADXL345_LATENT_REG)*1.25;
pommzorz 0:9a1682a09c50 298 }
pommzorz 0:9a1682a09c50 299
pommzorz 0:9a1682a09c50 300 int ADXL345_I2C::setTapLatency(short int latency_ms) {
pommzorz 0:9a1682a09c50 301
pommzorz 0:9a1682a09c50 302 latency_ms = latency_ms / 1.25;
pommzorz 0:9a1682a09c50 303 char latChar[2];
pommzorz 0:9a1682a09c50 304 latChar[0] = (latency_ms & 0x00FF);
pommzorz 0:9a1682a09c50 305 latChar[1] = (latency_ms << 8) & 0xFF00;
pommzorz 0:9a1682a09c50 306 return multiByteWrite(ADXL345_LATENT_REG, latChar, 2);
pommzorz 0:9a1682a09c50 307
pommzorz 0:9a1682a09c50 308 }
pommzorz 0:9a1682a09c50 309
pommzorz 0:9a1682a09c50 310 float ADXL345_I2C::getWindowTime(void) {
pommzorz 0:9a1682a09c50 311
pommzorz 0:9a1682a09c50 312 return (float)SingleByteRead(ADXL345_WINDOW_REG)*1.25;
pommzorz 0:9a1682a09c50 313 }
pommzorz 0:9a1682a09c50 314
pommzorz 0:9a1682a09c50 315 int ADXL345_I2C::setWindowTime(short int window_ms) {
pommzorz 0:9a1682a09c50 316
pommzorz 0:9a1682a09c50 317 window_ms = window_ms / 1.25;
pommzorz 0:9a1682a09c50 318 char windowChar[2];
pommzorz 0:9a1682a09c50 319 windowChar[0] = (window_ms & 0x00FF);
pommzorz 0:9a1682a09c50 320 windowChar[1] = ((window_ms << 8) & 0xFF00);
pommzorz 0:9a1682a09c50 321 return multiByteWrite(ADXL345_WINDOW_REG, windowChar, 2);
pommzorz 0:9a1682a09c50 322
pommzorz 0:9a1682a09c50 323 }
pommzorz 0:9a1682a09c50 324
pommzorz 0:9a1682a09c50 325 char ADXL345_I2C::getActivityThreshold(void) {
pommzorz 0:9a1682a09c50 326
pommzorz 0:9a1682a09c50 327 return SingleByteRead(ADXL345_THRESH_ACT_REG);
pommzorz 0:9a1682a09c50 328 }
pommzorz 0:9a1682a09c50 329
pommzorz 0:9a1682a09c50 330 int ADXL345_I2C::setActivityThreshold(char threshold) {
pommzorz 0:9a1682a09c50 331 return SingleByteWrite(ADXL345_THRESH_ACT_REG, threshold);
pommzorz 0:9a1682a09c50 332
pommzorz 0:9a1682a09c50 333 }
pommzorz 0:9a1682a09c50 334
pommzorz 0:9a1682a09c50 335 char ADXL345_I2C::getInactivityThreshold(void) {
pommzorz 0:9a1682a09c50 336 return SingleByteRead(ADXL345_THRESH_INACT_REG);
pommzorz 0:9a1682a09c50 337
pommzorz 0:9a1682a09c50 338 }
pommzorz 0:9a1682a09c50 339
pommzorz 0:9a1682a09c50 340 //int FUNCTION(short int * ptr_Output)
pommzorz 0:9a1682a09c50 341 //short int FUNCTION ()
pommzorz 0:9a1682a09c50 342
pommzorz 0:9a1682a09c50 343 int ADXL345_I2C::setInactivityThreshold(char threshold) {
pommzorz 0:9a1682a09c50 344 return SingleByteWrite(ADXL345_THRESH_INACT_REG, threshold);
pommzorz 0:9a1682a09c50 345
pommzorz 0:9a1682a09c50 346 }
pommzorz 0:9a1682a09c50 347
pommzorz 0:9a1682a09c50 348 char ADXL345_I2C::getTimeInactivity(void) {
pommzorz 0:9a1682a09c50 349
pommzorz 0:9a1682a09c50 350 return SingleByteRead(ADXL345_TIME_INACT_REG);
pommzorz 0:9a1682a09c50 351
pommzorz 0:9a1682a09c50 352 }
pommzorz 0:9a1682a09c50 353
pommzorz 0:9a1682a09c50 354 int ADXL345_I2C::setTimeInactivity(char timeInactivity) {
pommzorz 0:9a1682a09c50 355 return SingleByteWrite(ADXL345_TIME_INACT_REG, timeInactivity);
pommzorz 0:9a1682a09c50 356
pommzorz 0:9a1682a09c50 357 }
pommzorz 0:9a1682a09c50 358
pommzorz 0:9a1682a09c50 359 char ADXL345_I2C::getActivityInactivityControl(void) {
pommzorz 0:9a1682a09c50 360
pommzorz 0:9a1682a09c50 361 return SingleByteRead(ADXL345_ACT_INACT_CTL_REG);
pommzorz 0:9a1682a09c50 362
pommzorz 0:9a1682a09c50 363 }
pommzorz 0:9a1682a09c50 364
pommzorz 0:9a1682a09c50 365 int ADXL345_I2C::setActivityInactivityControl(char settings) {
pommzorz 0:9a1682a09c50 366 return SingleByteWrite(ADXL345_ACT_INACT_CTL_REG, settings);
pommzorz 0:9a1682a09c50 367
pommzorz 0:9a1682a09c50 368 }
pommzorz 0:9a1682a09c50 369
pommzorz 0:9a1682a09c50 370 char ADXL345_I2C::getFreefallThreshold(void) {
pommzorz 0:9a1682a09c50 371
pommzorz 0:9a1682a09c50 372 return SingleByteRead(ADXL345_THRESH_FF_REG);
pommzorz 0:9a1682a09c50 373
pommzorz 0:9a1682a09c50 374 }
pommzorz 0:9a1682a09c50 375
pommzorz 0:9a1682a09c50 376 int ADXL345_I2C::setFreefallThreshold(char threshold) {
pommzorz 0:9a1682a09c50 377 return SingleByteWrite(ADXL345_THRESH_FF_REG, threshold);
pommzorz 0:9a1682a09c50 378
pommzorz 0:9a1682a09c50 379 }
pommzorz 0:9a1682a09c50 380
pommzorz 0:9a1682a09c50 381 char ADXL345_I2C::getFreefallTime(void) {
pommzorz 0:9a1682a09c50 382
pommzorz 0:9a1682a09c50 383 return SingleByteRead(ADXL345_TIME_FF_REG)*5;
pommzorz 0:9a1682a09c50 384
pommzorz 0:9a1682a09c50 385 }
pommzorz 0:9a1682a09c50 386
pommzorz 0:9a1682a09c50 387 int ADXL345_I2C::setFreefallTime(short int freefallTime_ms) {
pommzorz 0:9a1682a09c50 388 freefallTime_ms = freefallTime_ms / 5;
pommzorz 0:9a1682a09c50 389 char fallChar[2];
pommzorz 0:9a1682a09c50 390 fallChar[0] = (freefallTime_ms & 0x00FF);
pommzorz 0:9a1682a09c50 391 fallChar[1] = (freefallTime_ms << 8) & 0xFF00;
pommzorz 0:9a1682a09c50 392
pommzorz 0:9a1682a09c50 393 return multiByteWrite(ADXL345_TIME_FF_REG, fallChar, 2);
pommzorz 0:9a1682a09c50 394
pommzorz 0:9a1682a09c50 395 }
pommzorz 0:9a1682a09c50 396
pommzorz 0:9a1682a09c50 397 char ADXL345_I2C::getTapAxisControl(void) {
pommzorz 0:9a1682a09c50 398
pommzorz 0:9a1682a09c50 399 return SingleByteRead(ADXL345_TAP_AXES_REG);
pommzorz 0:9a1682a09c50 400
pommzorz 0:9a1682a09c50 401 }
pommzorz 0:9a1682a09c50 402
pommzorz 0:9a1682a09c50 403 int ADXL345_I2C::setTapAxisControl(char settings) {
pommzorz 0:9a1682a09c50 404 return SingleByteWrite(ADXL345_TAP_AXES_REG, settings);
pommzorz 0:9a1682a09c50 405
pommzorz 0:9a1682a09c50 406 }
pommzorz 0:9a1682a09c50 407
pommzorz 0:9a1682a09c50 408 char ADXL345_I2C::getTapSource(void) {
pommzorz 0:9a1682a09c50 409
pommzorz 0:9a1682a09c50 410 return SingleByteRead(ADXL345_ACT_TAP_STATUS_REG);
pommzorz 0:9a1682a09c50 411
pommzorz 0:9a1682a09c50 412 }
pommzorz 0:9a1682a09c50 413
pommzorz 0:9a1682a09c50 414
pommzorz 0:9a1682a09c50 415
pommzorz 0:9a1682a09c50 416 char ADXL345_I2C::getInterruptEnableControl(void) {
pommzorz 0:9a1682a09c50 417
pommzorz 0:9a1682a09c50 418 return SingleByteRead(ADXL345_INT_ENABLE_REG);
pommzorz 0:9a1682a09c50 419
pommzorz 0:9a1682a09c50 420 }
pommzorz 0:9a1682a09c50 421
pommzorz 0:9a1682a09c50 422 int ADXL345_I2C::setInterruptEnableControl(char settings) {
pommzorz 0:9a1682a09c50 423 return SingleByteWrite(ADXL345_INT_ENABLE_REG, settings);
pommzorz 0:9a1682a09c50 424
pommzorz 0:9a1682a09c50 425 }
pommzorz 0:9a1682a09c50 426
pommzorz 0:9a1682a09c50 427 char ADXL345_I2C::getInterruptMappingControl(void) {
pommzorz 0:9a1682a09c50 428
pommzorz 0:9a1682a09c50 429 return SingleByteRead(ADXL345_INT_MAP_REG);
pommzorz 0:9a1682a09c50 430
pommzorz 0:9a1682a09c50 431 }
pommzorz 0:9a1682a09c50 432
pommzorz 0:9a1682a09c50 433 int ADXL345_I2C::setInterruptMappingControl(char settings) {
pommzorz 0:9a1682a09c50 434 return SingleByteWrite(ADXL345_INT_MAP_REG, settings);
pommzorz 0:9a1682a09c50 435
pommzorz 0:9a1682a09c50 436 }
pommzorz 0:9a1682a09c50 437
pommzorz 0:9a1682a09c50 438 char ADXL345_I2C::getInterruptSource(void){
pommzorz 0:9a1682a09c50 439
pommzorz 0:9a1682a09c50 440 return SingleByteRead(ADXL345_INT_SOURCE_REG);
pommzorz 0:9a1682a09c50 441
pommzorz 0:9a1682a09c50 442 }
pommzorz 0:9a1682a09c50 443
pommzorz 0:9a1682a09c50 444
pommzorz 0:9a1682a09c50 445
pommzorz 0:9a1682a09c50 446
pommzorz 0:9a1682a09c50 447