ADXL345测量角度

#include <Wire.h>   //调用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秒,刷新频率这里进行调整

}

/*————————————————
版权声明:本文为CSDN博主「weixin_39640773」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39640773/article/details/111790930

*/

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值