ghostinholiday 发表于 2016-1-3 21:54:19

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

我用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 )

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);
   



}
页: [1]
查看完整版本: 旧版本Arduino编译器如何玩转mpu6050加速度计?