Z14172803154 2025-02-27 09:59 采纳率: 66.7%
浏览 10

ArduinoIDE使用网上下载的MPU6050库出现错误

ArduinoIDE使用网上下载的MPU6050库出现问题,为什么无法编译 但是库是根据教程从github上下载的
按照教程使用ESP32去使用别人编译的代码
这里是代码

#include <MPU6050_6Axis_MotionApps20.h>
#include <MPU6050_6Axis_MotionApps612.h>
#include <MPU6050_9Axis_MotionApps41.h>
#include <helper_3dmath.h>

#include <BleMouse.h>
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

#define LED_PIN   2

#define TOUCH_KEY_QUANTIY   3
#define TOUCH_THRESHOLD     60
#define TOUCH_KEY_SCAN_PERIOD      10 /*100msec*/
#define LONG_PRESS_TIME         (1000/TOUCH_KEY_SCAN_PERIOD)

#define TOUCH_KEY_NO_CHANGE           0x00
#define TOUCH_KEY_DOWN                0x20
#define TOUCH_KEY_UP                  0x40
#define TOUCH_KEY_LONG_PRESS          0x80

BleMouse bleMouse;
MPU6050 accelgyro;

void setup()
{
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleMouse.begin();

  Wire.begin();
  Wire.setClock(400000);

  // initialize device
  Serial.println("Initializing I2C devices...");
  accelgyro.initialize();
  // verify connection
  Serial.println("Testing device connections...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");

  accelgyro.setXGyroOffset(-55);
  accelgyro.setYGyroOffset(66);
  accelgyro.setZGyroOffset(65);

  // configure Arduino LED pin for output
  pinMode(LED_PIN, OUTPUT);

}

void loop()
{
  static bool s_bClickStable=false;
  static bool s_bMiddleKeyPressed=false;
  if(bleMouse.isConnected())
  {
    int16_t gx, gy, gz;
    accelgyro.getRotation(&gx, &gy, &gz);
    uint8_t u8Key = u8TouchKeyScan();
    // if (u8Key){Serial.println(u8Key);}
    // Serial.print(touchRead(T0));
    // Serial.print(",");
    // Serial.print(touchRead(T4));
    // Serial.print(",");
    // Serial.println(touchRead(T5));
    switch (u8Key)
    {
      case TOUCH_KEY_DOWN:
      bleMouse.press(MOUSE_LEFT);
      s_bClickStable = true;
      break;
      case TOUCH_KEY_UP:
      case TOUCH_KEY_LONG_PRESS|TOUCH_KEY_UP:
      bleMouse.release(MOUSE_LEFT);
      s_bClickStable = false;
      break;
      case TOUCH_KEY_LONG_PRESS|1:
      // bleMouse.press(MOUSE_MIDDLE);
      // s_bClickStable = true;
      s_bMiddleKeyPressed = true;
      break;
      case TOUCH_KEY_UP|1:
      case TOUCH_KEY_LONG_PRESS|TOUCH_KEY_UP|1:
      // bleMouse.release(MOUSE_MIDDLE);
      // s_bClickStable = false;
      s_bMiddleKeyPressed = false;
      break;
      case TOUCH_KEY_DOWN|2:
      bleMouse.press(MOUSE_RIGHT);
      s_bClickStable = true;
      break;
      case TOUCH_KEY_UP|2:
      case TOUCH_KEY_LONG_PRESS|TOUCH_KEY_UP|2:
      bleMouse.release(MOUSE_RIGHT);
      s_bClickStable = false;
      break;
      default:
      break;
    }
    signed char x = gz/256;
    signed char y = gy/256;
    if (abs(x)>10 || abs(y)>10)
    {
      s_bClickStable = false;      
    }
    if (!s_bClickStable)
    {
      if (s_bMiddleKeyPressed)
      {
        x /= 10;
        y /= 10;
        if (x!=0 || y!=0)
        {
          bleMouse.move(0,0,y,x);
        }
      }
      else
      {
        if (x!=0 || y!=0)
        {
          bleMouse.move(-x, -y);
        }
      }
      digitalWrite(LED_PIN, 1);
    }
    delay(10);
    digitalWrite(LED_PIN, 0);
  }
}
uint16_t u16AverageFilter(uint16_t Value[])
{
  uint16_t val, average;
  uint8_t min;
  uint32_t sum;
  if (Value[0] < Value[1])
  {
    val = Value[0];
    min = 0;
  }
  else
  {
    val = Value[1];
    min = 1;
  }
  if (Value[2] < val)
  {
    val = Value[2];
    min = 2;
  }
  sum = (uint32_t)Value[0] + Value[1] + Value[2];
  average = sum / 3;
  if ((average - Value[min]) > 10)
  {
    average = (sum - Value[min]) / 2;
  }
  return average;
}
/*----------------------------------------------
Function: Touch Key scan
Parameter: void
Return: bit0~4 Touch Key number,
    bit5~7 Touch Key status: 0x00 no press, 0x20 Touch Key down, 
    0x40 Touch Key up, 0x80 Touch Key long press,
    0xC0 Touch Key up after long press.
Comments: Scan Touch Keys in 100mS
----------------------------------------------*/
uint8_t u8TouchKeyScan(void)
{
    static uint8_t s_u8ScanedTime, s_u8Sequence=0;
    static uint8_t s_a_u8TouchKey[TOUCH_KEY_QUANTIY];
    static uint8_t s_a_u8TouchKeyTimeCount[TOUCH_KEY_QUANTIY];
    static uint8_t s_a_u8Status[TOUCH_KEY_QUANTIY];
    static uint16_t s_aa_u16TouchValue[TOUCH_KEY_QUANTIY][3];
    uint8_t u8i;
    u8i = millis();
    if ((uint8_t)(u8i - s_u8ScanedTime) >= TOUCH_KEY_SCAN_PERIOD)
    {
        s_u8ScanedTime = u8i;
        for (u8i=0;u8i<TOUCH_KEY_QUANTIY;u8i++)
        {
            s_a_u8TouchKey[u8i] = (s_a_u8TouchKey[u8i] << 1) & 0x02;
        }
        s_u8Sequence++;
        if (s_u8Sequence >= 3)
        {
          s_u8Sequence = 0;
        }
        s_aa_u16TouchValue[0][s_u8Sequence] = touchRead(T0); /* left key */
        s_aa_u16TouchValue[1][s_u8Sequence] = touchRead(T4); /* middle key */
        s_aa_u16TouchValue[2][s_u8Sequence] = touchRead(T5); /* right key */
        for (u8i=0;u8i<TOUCH_KEY_QUANTIY;u8i++)
        {
            if(u16AverageFilter(s_aa_u16TouchValue[u8i]) < TOUCH_THRESHOLD) /*Touch Key0 pressed*/
            {
                s_a_u8TouchKey[u8i] |= 0x01;
            }
            switch (s_a_u8TouchKey[u8i])
            {
            case 0x01:
                s_a_u8Status[u8i] = TOUCH_KEY_DOWN;
                s_a_u8TouchKeyTimeCount[u8i] = 0;
                return (TOUCH_KEY_DOWN | u8i);
            case 0x02:
                return (((s_a_u8Status[u8i] & TOUCH_KEY_LONG_PRESS) | TOUCH_KEY_UP) | u8i);
            case 0x03:
                if (TOUCH_KEY_DOWN == s_a_u8Status[u8i])
                {
                    s_a_u8TouchKeyTimeCount[u8i]++;
                    if (s_a_u8TouchKeyTimeCount[u8i] >= LONG_PRESS_TIME)
                    {
                        s_a_u8Status[u8i] = TOUCH_KEY_LONG_PRESS;
                        return (TOUCH_KEY_LONG_PRESS | u8i);
                    }
                }
                break;
            default:    /*case 0x00*/
                break;
            }
        }
    }
    return TOUCH_KEY_NO_CHANGE;
}


然这是错误的提示

In file included from C:\ArduinoIDE\ESP32\Air_Mouse-main\air_mouse\air_mouse.ino:2:
C:\Users\HP\AppData\Local\Arduino15\libraries\MPU6050/MPU6050_6Axis_MotionApps612.h:151:37: error: conflicting declaration 'typedef class MPU6050_6Axis_MotionApps612 MPU6050'
  151 | typedef MPU6050_6Axis_MotionApps612 MPU6050;
      |                                     ^~~~~~~
In file included from C:\ArduinoIDE\ESP32\Air_Mouse-main\air_mouse\air_mouse.ino:1:
C:\Users\HP\AppData\Local\Arduino15\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:151:36: note: previous declaration as 'typedef class MPU6050_6Axis_MotionApps20 MPU6050'
  151 | typedef MPU6050_6Axis_MotionApps20 MPU6050;
      |                                    ^~~~~~~
In file included from C:\ArduinoIDE\ESP32\Air_Mouse-main\air_mouse\air_mouse.ino:3:
C:\Users\HP\AppData\Local\Arduino15\libraries\MPU6050/MPU6050_9Axis_MotionApps41.h:151:36: error: conflicting declaration 'typedef class MPU6050_9Axis_MotionApps41 MPU6050'
  151 | typedef MPU6050_9Axis_MotionApps41 MPU6050;
      |                                    ^~~~~~~
C:\Users\HP\AppData\Local\Arduino15\libraries\MPU6050/MPU6050_6Axis_MotionApps20.h:151:36: note: previous declaration as 'typedef class MPU6050_6Axis_MotionApps20 MPU6050'
  151 | typedef MPU6050_6Axis_MotionApps20 MPU6050;
      |                                    ^~~~~~~

exit status 1

Compilation error: exit status 1

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2025-02-27 09:59
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    ArduinoIDE使用网上下载的MPU6050库出现错误

    你下载的MPU6050库可能存在一些问题,导致无法编译。以下是一些可能的解决方案:

    1. 库版本问题:确保你下载的库版本与Arduino IDE的版本相匹配。如果你使用的是最新版本的Arduino IDE,可能需要下载最新版本的MPU6050库。
    2. 库路径问题:检查MPU6050库的路径是否正确。如果你将库下载到一个非默认路径,需要在Arduino IDE中手动指定库的路径。
    3. 库依赖关系问题:MPU6050库可能依赖其他库,例如I2C库。如果你没有安装这些依赖库,可能会导致编译错误。
    4. 代码错误:检查你的代码是否存在错误,例如语法错误、变量声明错误等。

    以下是一个简单的示例代码,使用MPU6050库在ESP32板上读取数据:

    #include <MPU6050.h>
    
    MPU6050 mpu(0x68); // MPU6050地址
    
    void setup() {
      Serial.begin(115200);
      mpu.begin();
    }
    
    void loop() {
      mpu.readData();
      Serial.print("Accelerometer X: ");
      Serial.print(mpu.getAccX());
      Serial.print(" Accelerometer Y: ");
      Serial.print(mpu.getAccY());
      Serial.print(" Accelerometer Z: ");
      Serial.println(mpu.getAccZ());
      delay(100);
    }
    

    如果你仍然无法解决问题,可以提供更多的代码和错误信息,以便我更好地帮助你。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月27日