void ADXL345::readFrom(byte address, int num, byte _buff[]) {
I2c.read(_dev_address, address, num) // request 6 bytes from device
if(I2c.available() != num){ // device may send less than requested (abnormal)
status = ADXL345_ERROR;
error_code = ADXL345_READ_ERROR;
}
int i = 0;
while(I2c.available())
{
_buff[i] = I2c.receive(); // receive a byte
i++;
}
}
If for some reason you don't want the actual code and want to use another library, I'll suggest I2Cdev site with a well documented classes for adlx345 and ITG3200.
Edit:
This caused me no problem. That is the only 2 functions I changed:
// Writes val to address register on device
void ADXL345::writeTo(byte address, byte val) {
I2c.write((uint8_t) _dev_address, (uint8_t) address, (uint8_t) val);
}
// Reads num bytes starting from address register on device in to _buff array
void ADXL345::readFrom(byte address, int num, byte _buff[]) {
I2c.read((uint8_t) _dev_address, (uint8_t) address, (uint8_t) num); // request 6 bytes from device
if(I2c.available() != num){ // device may send less than requested (abnormal)
status = ADXL345_ERROR;
error_code = ADXL345_READ_ERROR;
}
int i = 0;
while(I2c.available())
{
_buff[i] = I2c.receive(); // receive a byte
i++;
}
}
Arduino code used:
#include <I2C.h>
#include "FIMU_ADXL345.h"
ADXL345 acc = ADXL345();
int x=0, y=0, z=0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
I2c.begin();
delay(100);
acc.init(ADXL345_ADDR_ALT_LOW);
delay(100);
Serial.print("Is ACC OK?: ");
Serial.println(acc.status);
Serial.print("Any Error code?: ");
Serial.println(acc.error_code);
Serial.println("********Print all register current values********");
acc.printAllRegister();
Serial.println("********END register print******");
Serial.println(acc.getRate());
}
void loop() {
// put your main code here, to run repeatedly:
acc.readAccel(&x,&y,&z);
Serial.print(x);
Serial.print('\t');
Serial.print(y);
Serial.print('\t');
Serial.println(z);
delay(500);
}
Output given:
Is ACC OK?: 1
Any Error code?: 0
********Print all register current values********
0x00: B11100101
0x1D: B00000000
0x1E: B00000000
0x1F: B00000000
0x20: B00000000
0x21: B00000000
0x22: B00000000
0x23: B00000000
0x24: B00000000
0x25: B00000000
0x26: B00000000
0x27: B00000000
0x28: B00000000
0x29: B00000000
0x2A: B00000000
0x2B: B00000000
0x2C: B00001010
0x2D: B00001000
0x2E: B00000000
0x2F: B00000000
0x30: B10000011
0x31: B00000000
0x32: B11110101
0x33: B11111111
0x34: B00000011
0x35: B00000000
0x36: B11100101
0x37: B00000000
0x38: B00000000
0x39: B00000000
********END register print******
100.00
-12 4 230
-10 2 231
-11 3 231
-12 3 228
-10 3 230
-11 2 231
-12 2 229
-11 3 229
-10 3 231
-11 3 229
-10 2 230
-12 4 230
-12 3 229
-10 2 229
-13 4 230
-11 3 230
-10 3 230
-11 2 230
-11 4 229
-11 3 230
-11 3 230
-11 3 229
-12 3 229
-10 2 229
-11 3 230
-11 3 231
-11 3 230
-15 14 227
34 104 210
138 95 191
243 18 88
323 -15 74
280 -8 -2
263 -2 37
212 10 163
16 39 233
28 114 195
29 161 170
33 124 211
5 49 244
7 22 224
-10 3 229
-11 2 230
-12 2 230
-11 3 231
-12 4 228