|
环境:
arduino pro mini 一块
mpu6050 (GY-521) 一块
ArduinoProMini与mpu6050的接线:
VCC--VCC
GND--GND
A4--SDA
A5--SCL
问题现象:
用Arduino 的Wire 库函数读取mpu6050数据,发现读取的数据错位,总是在最开始会读取到一个0x0 的字节,
感觉只有在读取下一个字节的时候,mpu6050才会返回上一个字节。哪位朋友知道原因?
代码如下:
#include <Wire.h>
#define MPU6050_ADD 0x68 //MPU6050的IIC地址
#define PWR_MGMT_1 0x6B //电源管理,典型值:0x00(正常启用)
#define WHO_AM_I 0x75 //此寄存器存储IIC地址(默认数值0x68,只读)
void setup() {
// put your setup code here, to run once:
Wire.begin(); //默认作为master设备打开
Serial.begin(9600); //串口通讯的波特率设置为9600
Wire.beginTransmission(MPU6050_ADD);
Wire.write(PWR_MGMT_1);
Wire.write(0);
Wire.endTransmission(true);
Serial.println("**********");
}
void loop() {
// put your main code here, to run repeatedly:
Wire.beginTransmission(MPU6050_ADD);
Wire.write(WHO_AM_I);
Wire.requestFrom(MPU6050_ADD, 1, true);
Wire.endTransmission(true);
while(Wire.available()==1) {
unsigned char tmpChar=Wire.read();
Serial.print("WHO_AM_I register is: ");
Serial.print(tmpChar, BIN);
Serial.print(" 0x");
Serial.println(tmpChar, HEX);
}
delay(1000);
}
串口返回数据如下:
**********
WHO_AM_I register is: 0 0x0
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68
********** (这里我按了arduino pro mini 的复位键,程序重新开始运行,现象依旧)
WHO_AM_I register is: 0 0x0
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68
WHO_AM_I register is: 1101000 0x68 |
|