极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20802|回复: 2

I2C通信之Arduino与加速度传感器ADXL345

[复制链接]
发表于 2014-2-3 12:42:03 | 显示全部楼层 |阅读模式
本帖最后由 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

  1. #include <Wire.h>
  2. #define ADXLAddress (0x53)     //ADXL345的I2C地址(ADDR接地)
  3. int xAcc,  yAcc,  zAcc;       // 存放加速度值
  4. int buff[6];                  //存放寄存器高低位值,X、Y、Z轴共6个

  5. // 加速度传感器误差修正的偏移量
  6. int a_offx = 0;
  7. int a_offy = 0;
  8. int a_offz = 0;

  9. void writeRegister(int deviceAddress, byte address, byte val)
  10. {
  11.   Wire.beginTransmission(deviceAddress);
  12.   Wire.write(address);      
  13.   Wire.write(val);        
  14.   Wire.endTransmission();
  15. }

  16. void readRegister(int deviceAddress, byte address)
  17. {
  18.   Wire.beginTransmission(deviceAddress);  
  19.   Wire.write(address);        
  20.   Wire.endTransmission();
  21.   Wire.beginTransmission(deviceAddress);
  22.   Wire.requestFrom(deviceAddress, 6);   

  23.   int i = 0;
  24.   while(Wire.available())   
  25.   {  buff[i++] = Wire.read();  }
  26.   Wire.endTransmission();
  27. }

  28. void initAcc()
  29. {
  30.   //配置ADXL345,ADXL345采用默认的+-2g量程,10位分辨率
  31. writeRegister (ADXLAddress, 0x2C, 0x09);//设置输出数据速率50Hz,带宽25Hz。
  32. //默认值为0x0A,对应输出数据速率100Hz,带宽50Hz
  33. writeRegister (ADXLAddress, 0x2D, 0x08);  //设置ADXL345为测量模式。
  34.   }

  35. void getAccData()
  36. {
  37.   readRegister(ADXLAddress, 0x32);  
  38.   xAcc = ((buff[1] << 8) | buff[0] )+ a_offx;   
  39.   yAcc = ((buff[3] << 8) | buff[2] )+ a_offy;
  40.   zAcc = ((buff[5] << 8) | buff[4]) + a_offz;
  41. }

  42. void setup()
  43. {
  44.   Serial.begin(9600);
  45.   Wire.begin();
  46.   initAcc();
  47.   delay(50);
  48. }
  49.   
  50. void loop()
  51. {
  52.     getAccData();
  53.     Serial.print("xAcc=");
  54.     Serial.print(xAcc);
  55.     Serial.print("  yAcc=");
  56.     Serial.print(yAcc);
  57.     Serial.print("  zAcc=");
  58.     Serial.println(zAcc);
  59.    delay(200);
  60. }
复制代码



其它相关帖子:
加速度计和陀螺仪指南
I2C通信之Arduino与陀螺仪传感器ITG3205

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-2-4 12:22:07 | 显示全部楼层
好教程。 楼主的签名很霸气啊。难道真的是红点设计的获奖者??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-4 22:08:16 | 显示全部楼层
komoya 发表于 2014-2-4 12:22
好教程。 楼主的签名很霸气啊。难道真的是红点设计的获奖者??

谢谢。签名算是对黑马前辈的致敬~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-10-6 12:59 , Processed in 0.038265 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表