极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12414|回复: 0

旧版本Arduino编译器如何玩转mpu6050加速度计?

[复制链接]
发表于 2016-1-3 21:54:19 | 显示全部楼层 |阅读模式
我用1.0.4的Ide和UNO都成功连上了adxl345和mpu6050,
之后换只支持0.0.12IDE的maple后,mpu6050每次下载程序后只读取一次数据然后就不停重复这个值;
于是怒把adxl345和mpu6050公用一套sda scl接上,结果adxl345正常工作,mpu6050依旧不停重复值,这是什么原理?
以下代码:
#include <Wire.h>  //调用arduino自带的I2C库


#define Register_ID 0
#define Register_2D 0x2D//ADXl345收集数据寄存器地址
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
#define Register_Z0 0x36
#define Register_Z1 0x37
#define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] )

int ADXAddress = 0xA7>>1;  //ADXl345地址转换为7位地址0x53


int MPU_addr=0x68;  

uint8 X0,X1,Y0,Y1,Z1,Z0,T0,T1,GX0,GX1,GY0,GY1,GZ0,GZ1;
uint16 AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup()
{
  //Serial.begin(9600);//串口初始化
  
  
  Wire.begin(19,20);  //初始化I2C
  delay(500);


}

void loop()
{

  
  /*Wire.beginTransmission(MPU_addr);
  Wire.send(0x6B);
  Wire.send(0);
  Wire.endTransmission();
  delay(100);

Wire.beginTransmission(MPU_addr);
  Wire.send(0x6B);
   Wire.endTransmission();
Wire.beginTransmission(MPU_addr);
  Wire.send(0);
  Wire.endTransmission();
  delay(100);*/
Wire.beginTransmission(ADXAddress);
  Wire.send(Register_2D);
  Wire.send(8);
  Wire.endTransmission();
    Wire.beginTransmission(ADXAddress);
    Wire.send(Register_X0);
    Wire.send(Register_X1);
    Wire.endTransmission();
    Wire.requestFrom(ADXAddress,2);
    if(Wire.available()<=2);
    {
      X0 = Wire.receive();
      X1 = Wire.receive();
      X1 = X1<<8;
      AcX = X0+X1;
    }
   
    Wire.beginTransmission(ADXAddress);
    Wire.send(Register_Y0);
    Wire.send(Register_Y1);
    Wire.endTransmission();
    Wire.requestFrom(ADXAddress,2);
    if(Wire.available()<=2);
    {
      Y0 = Wire.receive();
      Y1 = Wire.receive();
      Y1 = Y1<<8;
      AcY = Y0+Y1;
    }
//之前为adxl345收集数据部分,之后为mpu6050部分//
   

   Wire.beginTransmission(MPU_addr);
  Wire.send(0x6B);
  Wire.send(0);
Wire.endTransmission();
     Wire.beginTransmission(MPU_addr);
    Wire.send(0x3F);
    Wire.send(0x40);
    Wire.endTransmission();
    Wire.requestFrom(MPU_addr,2);
    if(Wire.available()<=2);
    {
      Z0 = Wire.receive();
      Z1 = Wire.receive();
     
      AcZ = Z0<<8|Z1;
    }
   
     Wire.beginTransmission(MPU_addr);
    Wire.send(0x41);
    Wire.send(0x42);
    Wire.endTransmission();
    Wire.requestFrom(MPU_addr,2);
    if(Wire.available()<=2);
    {
      T0 = Wire.receive();
      T1 = Wire.receive();
     
      Tmp = T0<<8|T1;
    }
Wire.beginTransmission(MPU_addr);
    Wire.send(0x43);
    Wire.send(0x44);
    Wire.endTransmission();
    Wire.requestFrom(MPU_addr,2);
    if(Wire.available()<=2);
    {
      GX0 = Wire.receive();
      GX1 = Wire.receive();
      
      GyX = GX0<<8|GX1;
    }  
   
Wire.beginTransmission(MPU_addr);
    Wire.send(0x45);
    Wire.send(0x46);
    Wire.endTransmission();
    Wire.requestFrom(MPU_addr,2);
    if(Wire.available()<=2);
    {
      GY0 = Wire.receive();
      GY1 = Wire.receive();
      
      GyY = GY0<<8|GY1;
    }      

Wire.beginTransmission(MPU_addr);
    Wire.send(0x47);
    Wire.send(0x48);
    Wire.endTransmission();
    Wire.requestFrom(MPU_addr,2);
    if(Wire.available()<=2);
    {
      GZ0 = Wire.receive();
      GZ1 = Wire.receive();
      
      GyZ = GZ0<<8|GZ1;
    }
   
  
   

     SerialUSB.print("AcX = "); SerialUSB.print(AcX);
  SerialUSB.print(" | AcY = "); SerialUSB.print(AcY);
  SerialUSB.print(" | AcZ = "); SerialUSB.print(AcZ);
  SerialUSB.print(" | Tmp = "); SerialUSB.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  SerialUSB.print(" | GyX = "); SerialUSB.print(GyX);
  SerialUSB.print(" | GyY = "); SerialUSB.print(GyY);
  SerialUSB.print(" | GyZ = "); SerialUSB.println(GyZ);
delay(1000);
   
  
  

}
回复

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 17:05 , Processed in 0.035825 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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