I2C通信之Arduino与加速度传感器ADXL345
本帖最后由 leicheng 于 2014-2-4 22:03 编辑//We connect CS to 3.3V to tell the sensor we will be using it as an I2C device, and not an SPI device.
IDE环境:Arduino1.0.5
#include <Wire.h>
#define ADXLAddress (0x53) //ADXL345的I2C地址(ADDR接地)
int xAcc,yAcc,zAcc; // 存放加速度值
int buff; //存放寄存器高低位值,X、Y、Z轴共6个
// 加速度传感器误差修正的偏移量
int a_offx = 0;
int a_offy = 0;
int a_offz = 0;
void writeRegister(int deviceAddress, byte address, byte val)
{
Wire.beginTransmission(deviceAddress);
Wire.write(address);
Wire.write(val);
Wire.endTransmission();
}
void readRegister(int deviceAddress, byte address)
{
Wire.beginTransmission(deviceAddress);
Wire.write(address);
Wire.endTransmission();
Wire.beginTransmission(deviceAddress);
Wire.requestFrom(deviceAddress, 6);
int i = 0;
while(Wire.available())
{buff = Wire.read();}
Wire.endTransmission();
}
void initAcc()
{
//配置ADXL345,ADXL345采用默认的+-2g量程,10位分辨率
writeRegister (ADXLAddress, 0x2C, 0x09);//设置输出数据速率50Hz,带宽25Hz。
//默认值为0x0A,对应输出数据速率100Hz,带宽50Hz
writeRegister (ADXLAddress, 0x2D, 0x08);//设置ADXL345为测量模式。
}
void getAccData()
{
readRegister(ADXLAddress, 0x32);
xAcc = ((buff << 8) | buff )+ a_offx;
yAcc = ((buff << 8) | buff )+ a_offy;
zAcc = ((buff << 8) | buff) + a_offz;
}
void setup()
{
Serial.begin(9600);
Wire.begin();
initAcc();
delay(50);
}
void loop()
{
getAccData();
Serial.print("xAcc=");
Serial.print(xAcc);
Serial.print("yAcc=");
Serial.print(yAcc);
Serial.print("zAcc=");
Serial.println(zAcc);
delay(200);
}
其它相关帖子:
加速度计和陀螺仪指南
I2C通信之Arduino与陀螺仪传感器ITG3205 好教程。 楼主的签名很霸气啊。难道真的是红点设计的获奖者??:) komoya 发表于 2014-2-4 12:22 static/image/common/back.gif
好教程。 楼主的签名很霸气啊。难道真的是红点设计的获奖者??
谢谢。签名算是对黑马前辈的致敬~
页:
[1]