鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    MPU6050初始化失败

    已定时 已固定 已锁定 已移动
    FishBot二驱机器人
    mpu6050 初始化失败
    1
    5
    5.0k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 1
      1223386926
      最后由 编辑

      /* Get all possible data from MPU6050
       * Accelerometer values are given as multiple of the gravity [1g = 9.81 m/s²]
       * Gyro values are given in deg/s
       * Angles are given in degrees
       * Note that X and Y are tilt angles and not pitch/roll.
       *
       * License: MIT
       */
      
      #include "Wire.h"
      #include <MPU6050_light.h>
      
      MPU6050 mpu(Wire);
      
      unsigned long timer = 0;
      
      void setup() {
        Serial.begin(115200);
        Wire.begin(18, 19);
        
        byte status = mpu.begin();
        Serial.print(F("MPU6050 status: "));
        Serial.println(status);
        while(status!=0){
          Serial.println("Initial MPU6050 error!");
          delay(1000);
        } // stop everything if could not connect to MPU6050
        
        Serial.println(F("Calculating offsets, do not move MPU6050"));
        delay(1000);
        mpu.calcOffsets(true,true); // gyro and accelero
        Serial.println("Done!\n");
        
      }
      
      void loop() {
        mpu.update();
      
        if(millis() - timer > 1000){ // print data every second
          Serial.print(F("TEMPERATURE: "));Serial.println(mpu.getTemp());
          Serial.print(F("ACCELERO  X: "));Serial.print(mpu.getAccX());
          Serial.print("\tY: ");Serial.print(mpu.getAccY());
          Serial.print("\tZ: ");Serial.println(mpu.getAccZ());
        
          Serial.print(F("GYRO      X: "));Serial.print(mpu.getGyroX());
          Serial.print("\tY: ");Serial.print(mpu.getGyroY());
          Serial.print("\tZ: ");Serial.println(mpu.getGyroZ());
        
          Serial.print(F("ACC ANGLE X: "));Serial.print(mpu.getAccAngleX());
          Serial.print("\tY: ");Serial.println(mpu.getAccAngleY());
          
          Serial.print(F("ANGLE     X: "));Serial.print(mpu.getAngleX());
          Serial.print("\tY: ");Serial.print(mpu.getAngleY());
          Serial.print("\tZ: ");Serial.println(mpu.getAngleZ());
          Serial.println(F("=====================================================\n"));
          timer = millis();
        }
      }
      

      a8a0a774-54ad-4360-9d33-87f98e997753-image.png

      1 1 条回复 最后回复 回复 引用 0
      • 1
        1223386926
        最后由 编辑

        需要修改MPU6050默认地址,文件MPU6050_light.h
        // #define MPU6050_ADDR 0x68
        #define MPU6050_ADDR 0x6a
        cd9d3119-a711-4289-937c-562a5c3c063a-image.png

        1 1 条回复 最后回复 回复 引用 0
        • 1
          1223386926 @1223386926
          最后由 编辑

          @1223386926 在 MPU6050初始化失败 中说:

          需要修改MPU6050默认地址,文件MPU6050_light.h
          // #define MPU6050_ADDR 0x68
          #define MPU6050_ADDR 0x6a
          cd9d3119-a711-4289-937c-562a5c3c063a-image.png

          检测地址

          #include "Wire.h"
          #include <MPU6050_light.h>
          
          void setup() {
            Serial.begin(115200);
            Wire.begin(18, 19); // 使用您的引脚
            delay(1000);
            
            Serial.println("I2C Scanner Starting...");
          }
          
          void loop() {
            byte error, address;
            int nDevices = 0;
          
            Serial.println("Scanning I2C bus...");
            
            for(address = 1; address < 127; address++ ) {
              Wire.beginTransmission(address);
              error = Wire.endTransmission();
              
              if (error == 0) {
                Serial.print("I2C device found at address 0x");
                if (address < 16) Serial.print("0");
                Serial.print(address, HEX);
                Serial.println(" !");
                
                if (address == 0x68 || address == 0x69) {
                  Serial.println(">>> This is likely an MPU6050! <<<");
                }
                nDevices++;
              }
            }
            
            if (nDevices == 0) {
              Serial.println("No I2C devices found!");
            } else {
              Serial.println("Scan complete.");
            }
            Serial.println("-------------------");
            delay(3000);
          }
          
          1 1 条回复 最后回复 回复 引用 0
          • 1
            1223386926 @1223386926
            最后由 编辑

            @1223386926 在 MPU6050初始化失败 中说:

            @1223386926 在 MPU6050初始化失败 中说:

            需要修改MPU6050默认地址,文件MPU6050_light.h
            // #define MPU6050_ADDR 0x68
            #define MPU6050_ADDR 0x6a
            cd9d3119-a711-4289-937c-562a5c3c063a-image.png

            检测地址

            #include "Wire.h"
            #include <MPU6050_light.h>
            
            void setup() {
              Serial.begin(115200);
              Wire.begin(18, 19); // 使用您的引脚
              delay(1000);
              
              Serial.println("I2C Scanner Starting...");
            }
            
            void loop() {
              byte error, address;
              int nDevices = 0;
            
              Serial.println("Scanning I2C bus...");
              
              for(address = 1; address < 127; address++ ) {
                Wire.beginTransmission(address);
                error = Wire.endTransmission();
                
                if (error == 0) {
                  Serial.print("I2C device found at address 0x");
                  if (address < 16) Serial.print("0");
                  Serial.print(address, HEX);
                  Serial.println(" !");
                  
                  if (address == 0x68 || address == 0x69) {
                    Serial.println(">>> This is likely an MPU6050! <<<");
                  }
                  nDevices++;
                }
              }
              
              if (nDevices == 0) {
                Serial.println("No I2C devices found!");
              } else {
                Serial.println("Scan complete.");
              }
              Serial.println("-------------------");
              delay(3000);
            }
            

            2698c065-ef0b-4924-89d1-4ae4220c57ba-image.png

            1 条回复 最后回复 回复 引用 0
            • 1
              1223386926 @1223386926
              最后由 编辑

              @1223386926 改为0x6A虽然不会报错,但无法读取有效的数值。根本原因在于用错了库,不应该使用https://github.com/rfetick/MPU6050_light.git,而是应该https://github.com/fishros/MPU6050_light.git。
              e4b830da-4cdd-4262-8d7b-e2580a8303ff-image.png 替代文字。
              换完之后,就可以按教程中的代码读取数值:
              872171f9-a41a-44d1-8b4c-b5293335c092-image.png

              1 条回复 最后回复 回复 引用 0
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS