How Could I Achieve 3000Hz Sampling Rate on Arduino Uno+ADXL345 ?

Hello arduino community,

I have used Arduino Uno +ADXL345 to get the acceleration data on serial monitor.

I would like to reach 3000Hz sampling rate in my work,however I could only reach 700Hz sampling rate.

Could anyone help me to solve my problem?

I will appreciate your help with this situation.

Here is my code: (I use I^2C to connect)

#include <Wire.h>
#include<TimerOne.h>
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37

int ADXAddress = 0xA7>>1;
int reading = 0;
int val = 0;
int X0,X1,X_out;
int Y0,Y1,Y_out;
int Z1,Z0,Z_out;
double Xg,Yg,Zg;

void stoptrans()
{
Serial.println(Xg);

Serial.println(Yg);

Serial.println(Zg);
}

void setup()
{

Wire.begin(); // initial I2C
Serial.begin(921600);

Wire.beginTransmission(ADXAddress);
Wire.write(Register_2D);
Wire.write(8 ); //measuring enable
Wire.endTransmission(); //stop transmitting

Timer1.initialize(1400);
Timer1.attachInterrupt(stoptrans,1400);
}

void loop()
{
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.write(Register_X0);
Wire.write(Register_X1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available()<=2);
{
X0 = Wire.read();
X1 = Wire.read();
X1 = X1<<8;
X_out = X0+X1;
}
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.write(Register_Y0);
Wire.write(Register_Y1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available()<=2);
{
Y0 = Wire.read();
Y1 = Wire.read();
Y1 = Y1<<8;
Y_out = Y0+Y1;
}
Wire.beginTransmission(ADXAddress); // transmit to device
Wire.write(Register_Z0);
Wire.write(Register_Z1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
if(Wire.available()<=2);
{
Z0 = Wire.read();
Z1 = Wire.read();
Z1 = Z1<<8;
Z_out = Z0+Z1;
}

Xg = X_out/256.00; //?????????????g,???????2??
Yg = Y_out/256.00;
Zg = Z_out/256.00;

}

Posting (badly) the same code twice is not likely to gain you any friends.

Do not cross-post, it wastes time.

Use tags when posting code.

I think default I2C speed is 100 KHz.
Figure out how to get it to 400 KHz, that will help a lot there.
You have what looks like 7 transfers with every access, that slows the rate down some too.
Some processing time for the if statements and the byte to int math, it all adds up.
I bet this32-bit math takes some time too:
Xg = X_out/256.00;
Yg = Y_out/256.00;
Zg = Z_out/256.00;