ADXL三轴加速度--Arduino

接线如图:


代码如下

#include <Wire.h>//调用Arduino自带库

#define Register_ID 0 //器件ID 十六进制为0x00  十进制为0
#define Register_2D 0x2D //省电特性控制
#define Register_X0 0x32 //X轴数据0
#define Register_X1 0x33 //X轴数据1
#define Register_Y0 0x34 //Y轴数据0
#define Register_Y1 0x35 //Y轴数据1
#define Register_Z0 0x36 //Z轴数据0
#define Register_Z1 0x37 //Z轴数据1

//ADXL345寄存器映射地址

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;
//定义变量
 

void setup()
{
   Wire.begin(); //初始化I2C         
   Serial.begin(9600);  //初始化串口
   delay(100);
   // enable to measute g data
   Wire.beginTransmission(ADXAddress);//开启发送
   Wire.write(Register_2D);//写入ADXL345寄存器映射地址
   Wire.write(8);                //测量使能
   Wire.endTransmission();     // 停止发送

}

void loop()
{
   //读取X轴数据
   Wire.beginTransmission(ADXAddress); // 开启发送
   Wire.write(Register_X0);//写入ADXL345寄存器映射地址
   Wire.write(Register_X1);//写入ADXL345寄存器映射地址
   Wire.endTransmission();//结束发送
   Wire.requestFrom(ADXAddress,2); //请求 ADXL345 二个字节
   if(Wire.available()<=2)   //获取<=2个数据
   {
     X0 = Wire.read();
     X1 = Wire.read();
     X1=X1<<8;
     X_out=X0+X1;  
   }

  //读取Y轴数据↓
   Wire.beginTransmission(ADXAddress); // 开启发送
   Wire.write(Register_Y0);//写入ADXL345寄存器映射地址
   Wire.write(Register_Y1);//写入ADXL345寄存器映射地址
   Wire.endTransmission();//结束发送
   Wire.requestFrom(ADXAddress,2); //请求ADXL345二个字节
   if(Wire.available()<=2)   //获取<=2个数据
   {
     Y0 = Wire.read();
     Y1 = Wire.read();
     Y1=Y1<<8;
     Y_out=Y0+Y1;
   }
   //读取Z轴数据
   Wire.beginTransmission(ADXAddress); // 开启发送
   Wire.write(Register_Z0);//写入ADXL345寄存器映射地址
   Wire.write(Register_Z1);//写入ADXL345寄存器映射地址
   Wire.endTransmission();//结束发送
   Wire.requestFrom(ADXAddress,2); //请求ADXL345二个字节
   if(Wire.available()<=2)   //获取<=2个数据
   {
     Z0 = Wire.read();
     Z1 = Wire.read();
     Z1=Z1<<8;
     Z_out=Z0+Z1;
   }
   /*
   Xg=X_out/256.0;
   Yg=Y_out/256.0;
   Zg=Z_out/256.0;
   */
    Xg=X_out; 
    Yg=Y_out; 
    Zg=Z_out; 
   Serial.print("X= ");
   Serial.print(Xg);
   Serial.print("       ");
   Serial.print("Y= ");
   Serial.print(Yg);
   Serial.print("       ");
   Serial.print("Z= ");
   Serial.print(Zg);
   Serial.println("  ");
   delay(200);
   //串口输出
}
打开Arduino的串口绘图器可以前后左右上去移动,观察效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值