leicheng 发表于 2014-2-3 12:42:03

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:07

好教程。 楼主的签名很霸气啊。难道真的是红点设计的获奖者??:)

leicheng 发表于 2014-2-4 22:08:16

komoya 发表于 2014-2-4 12:22 static/image/common/back.gif
好教程。 楼主的签名很霸气啊。难道真的是红点设计的获奖者??

谢谢。签名算是对黑马前辈的致敬~
页: [1]
查看完整版本: I2C通信之Arduino与加速度传感器ADXL345