极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13907|回复: 3

arduino pro mini 与MPU6050通讯的问题

[复制链接]
发表于 2017-8-24 14:39:08 | 显示全部楼层 |阅读模式
环境:
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
回复

使用道具 举报

发表于 2017-8-24 16:29:55 | 显示全部楼层
在setup()最后加个delay(2000);试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-24 17:11:25 | 显示全部楼层
在串口初始化完成以后和setup()最后个加了delay(2000); 现象一就,还是会多出一个字节数据,
// put your setup code here, to run once:
  Wire.begin(); //默认作为master设备打开
  Serial.begin(9600); //串口通讯的波特率设置为9600
  delay(2000);

  Wire.beginTransmission(MPU6050_ADD);
  Wire.write(PWR_MGMT_1);
  Wire.write(0);
  Wire.endTransmission(true);

  Serial.println("**********");
  delay(2000);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-25 14:00:44 | 显示全部楼层
刚才用mpu6050的库文件实验了一下,直接可以调出正确的数据。但是用wire库文件就会出现多一个字节的问题,真是奇了怪了。哪位朋友用一楼提供的程序跑一下,看看也是多出一个字节数据吗?要不是,估计可能就是这块mpu6050的问题了。
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 17:40 , Processed in 0.038666 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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