adxl345取出值怎么算角度_改了别人的程序和一些自己的研究,用ADXL345测量角度成功...

#include   //调用arduino自带的I2C库

#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;   //转换为7位地址

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;

double aCosX,AngleX;

double aCosY,AngleY;

double aCosZ,AngleZ;

void setup()

{

Serial.begin(9600);

Wire.begin();   //初始化I2C

delay(100);

Wire.beginTransmission(ADXAddress);

Wire.write(Register_2D);

Wire.write(8);

Wire.endTransmission();

}

void loop()

{

Wire.beginTransmission(ADXAddress);

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);

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);

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;

//计算X轴倾角

aCosX=acos(Xg/0.98);

AngleX=90-aCosX*(180/PI);

//计算Y轴倾角

aCosY=acos(Yg/0.98);

AngleY=90-aCosY*(180/PI);

//计算Z轴倾角

aCosZ=acos(Zg/0.98);

AngleZ=90-aCosZ*(180/PI);

/*/

显示X轴

/*/

Serial.print("x=");

Serial.print(Xg,DEC);

Serial.print("g");

Serial.println();

/*///

显示Y轴

/*/

Serial.print("y=");

Serial.print(Yg,DEC);

Serial.print("g");

Serial.println();

/*///

显示Z轴

/*/

Serial.print("z=");

Serial.print(Zg,DEC);

Serial.print("g");

Serial.println();

//显示X轴偏角

Serial.print("x偏角=");

Serial.print(AngleX,DEC);

Serial.print("°");

Serial.println();

//显示Y轴偏角

Serial.print("y偏角=");

Serial.print(AngleY,DEC);

Serial.print("°");

Serial.println();

//显示Z轴偏角

Serial.print("z偏角=");

Serial.print(AngleZ,DEC);

Serial.print("°");

Serial.println();

delay(300);//延时0.3秒,刷新频率这里进行调整

}


版权声明:本文为weixin_39640773原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。