极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17741|回复: 0

求助帖

[复制链接]
发表于 2019-3-15 10:27:45 | 显示全部楼层 |阅读模式
用同样的程序读取mpu6050的数据,结果due和uno的读数不一样,due的读数是错的,程序如下,哪位大佬帮忙解答一下

  1. #include "Wire.h"
  2. #include "I2Cdev.h"
  3. long accelX;      // 定义为全局变量,可直接在函数内部使用
  4. float gForceX;
  5. long  gyroZ;
  6. float rotZ;
  7. int angle;
  8. void setup()
  9. {  
  10.     Serial.begin(9600);
  11.     Wire.begin();
  12.     setupMPU();
  13. }
  14. void loop() {

  15.    recordAccelRegisters();
  16.    recordGyroRegisters();
  17.    angle=180/3.14*acos(gForceX);
  18.    Serial.print(rotZ+1.2);Serial.print(", ");
  19.    Serial.print(angle);Serial.println(", ");
  20.    delay(100);
  21. }
  22. void setupMPU(){
  23.   // REGISTER 0x6B/REGISTER 107:Power Management 1
  24.   Wire.beginTransmission(0b1101000); //This is the I2C address of the MPU (b1101000/b1101001 for AC0 low/high datasheet Sec. 9.2)
  25.   Wire.write(0x6B); //Accessing the register 6B/107 - Power Management (Sec. 4.30)
  26.   Wire.write(0b00000000); //Setting SLEEP register to 0, using the internal 8 Mhz oscillator
  27.   Wire.endTransmission();

  28.   // REGISTER 0x1b/REGISTER 27:Gyroscope Configuration
  29.   Wire.beginTransmission(0b1101000); //I2C address of the MPU
  30.   Wire.write(0x1B); //Accessing the register 1B - Gyroscope Configuration (Sec. 4.4)
  31.   Wire.write(0x00000000); //Setting the gyro to full scale +/- 250deg./s (转化为rpm:250/360 * 60 = 41.67rpm) 最高可以转化为2000deg./s
  32.   Wire.endTransmission();
  33.   
  34.   // REGISTER 0x1C/REGISTER 28:ACCELEROMETER CONFIGURATION
  35.   Wire.beginTransmission(0b1101000); //I2C address of the MPU
  36.   Wire.write(0x1C); //Accessing the register 1C - Acccelerometer Configuration (Sec. 4.5)
  37.   Wire.write(0b00000000); //Setting the accel to +/- 2g(if choose +/- 16g,the value would be 0b00011000)
  38.   Wire.endTransmission();
  39. }

  40. void recordAccelRegisters() {
  41.   // REGISTER 0x3B~0x40/REGISTER 59~64
  42.   Wire.beginTransmission(0b1101000); //I2C address of the MPU
  43.   Wire.write(0x3B); //Starting register for Accel Readings
  44.   Wire.endTransmission();
  45.   Wire.requestFrom(0b1101000,2); //Request Accel Registers (3B - 40)
  46.   // 使用了左移<<和位运算|。Wire.read()一次读取1bytes,并在下一次调用时自动读取下一个地址的数据
  47.   while(Wire.available() < 2);  // Waiting for all the 6 bytes data to be sent from the slave machine (必须等待所有数据存储到缓冲区后才能读取)
  48.   accelX = Wire.read()<<8|Wire.read(); //Store first two bytes into accelX (自动存储为定义的long型值)
  49.   processAccelData();
  50. }

  51. void processAccelData(){
  52.   gForceX = accelX / 16384.0;     //float = long / float
  53. }

  54. void recordGyroRegisters() {
  55.   // REGISTER 0x43~0x48/REGISTER 67~72
  56.   Wire.beginTransmission(0b1101000); //I2C address of the MPU
  57.   Wire.write(0x47); //Starting register for Gyro Readings
  58.   Wire.endTransmission();
  59.   Wire.requestFrom(0b1101000,2); //Request Gyro Registers (43 ~ 48)
  60.   while(Wire.available() < 2);
  61.   gyroZ = Wire.read()<<8|Wire.read(); //Store last two bytes into accelZ
  62.   processGyroData();
  63. }

  64. void processGyroData() {
  65.   rotZ = gyroZ / 131.0;
  66. }
复制代码

回复

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 19:59 , Processed in 0.042985 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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