|
|
本帖最后由 dingoslove 于 2015-6-7 20:06 编辑
好久就买了adxl345,一直没有调试,今天有空实验一下。
ADXL345 是一款小巧纤薄的低功耗三轴加速度计,可以对高达±16 g的加速度进行高分辨率(13 位)测量。数字输出数据为 16 位二进制补码格式,可通过SPI (3 线或 4 线)或者I2C数字接口访问。
本例中,ADXL345接3.3v,i2c通信,屏幕使用串口板加1602屏幕,i2c接口,这样接线简单,arduino使用2009版,IDE为1.6.4最新版。
- #include <Wire.h> //调用arduino自带的I2C库
- #include <LiquidCrystal_I2C.h> //调用arduino自带的LiquidCrystal库
-
- #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
-
- LiquidCrystal_I2C lcd(0x27,16,2); // 设置 LCD 地址为 0x27 ,16字符2行显示
-
- 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()
- {
- lcd.init(); //初始化LCD
- delay(100);
- Wire.begin(); //初始化I2C
- delay(100);
- Wire.beginTransmission(ADXAddress);
- Wire.write(Register_2D);
- Wire.write(8);
- Wire.endTransmission();
- lcd.backlight();
-
- }
-
- 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;
- lcd.clear(); //清屏
- lcd.print("X="); //使屏幕显示文字X=
- lcd.print(Xg);
- lcd.setCursor(8, 0);
- lcd.print("Y=");
- lcd.print(Yg);
- lcd.setCursor(0, 1);
- lcd.print("Z=");
- lcd.print(Zg);
- delay(300); //延时0.3秒,刷新频率这里进行调整
-
- }
复制代码 |
|