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