[异常解决] MPU6050启动异常读出陀螺仪和加速度计的值全为0的解决办法

 

 

在调试一个自己做的手环,每次用keil烧写好程序运行的蓝牙、陀螺仪都是正常的。但是掉电再上电之后蓝牙是好的、陀螺仪可以读出ID但是读出的加速度和角速度数据全为0。

下面是发生问题时main函数的前面部分:

首先看到一篇:《mpu6050需要一段时间上电然后再初始化!!》的文章,于是在前面加了个延时。

下面是添加一个延时的main函数前部分:

不过,还是有相同的问题!

然后,又找了一个《TM4C123GxL MPU6050读出陀螺仪和加速度计的值全为0》的文章,他出现的情况和我的非常像!

下面是作者最后给出的总结:

我根据他结论的第二点把代码做如下修改最终解决了问题:

1.将I2C初始化函数放在后面,main函数刚开始加延时

2.mpu6050初始化进行循环初始化直到写入成功 

 

MPU6050是一种六轴惯性测量单元,可以同时测量三个加速度和三个角速度。读取数据的步骤如下: 1. 初始化MPU6050,设置采样率、滤波器等参数。 2. 通过I2C通信,读取MPU6050寄存器数据。 3. 将读取数据转换为实际的加速度和角速度,通过公式计算。 4. 可以将数据通过串口输出,或者使用其他方式进行处理和显示。 以下是一个简单的Arduino示例代码,演示如何读取MPU6050数据: ``` #include <Wire.h> const int MPU_addr=0x68; // I2C地址 int16_t AcX,AcY,AcZ,Tmp,GyroX,GyroY,GyroZ; void setup(){ Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); // PWR_MGMT_1寄存器 Wire.write(0); // 唤醒MPU6050 Wire.endTransmission(true); Serial.begin(9600); } void loop(){ Wire.beginTransmission(MPU_addr); Wire.write(0x3B); // ACCEL_XOUT_H寄存器 Wire.endTransmission(false); Wire.requestFrom(MPU_addr,14,true); // 读取14个寄存器数据 AcX=Wire.read()<<8|Wire.read(); // 加速度X轴 AcY=Wire.read()<<8|Wire.read(); // 加速度Y轴 AcZ=Wire.read()<<8|Wire.read(); // 加速度Z轴 Tmp=Wire.read()<<8|Wire.read(); // 温度 GyroX=Wire.read()<<8|Wire.read(); // 陀螺仪X轴 GyroY=Wire.read()<<8|Wire.read(); // 陀螺仪Y轴 GyroZ=Wire.read()<<8|Wire.read(); // 陀螺仪Z轴 Serial.print("AcX = "); Serial.print(AcX); Serial.print(" | AcY = "); Serial.print(AcY); Serial.print(" | AcZ = "); Serial.print(AcZ); Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53); // 温度公式 Serial.print(" | GyroX = "); Serial.print(GyroX); Serial.print(" | GyroY = "); Serial.print(GyroY); Serial.print(" | GyroZ = "); Serial.println(GyroZ); delay(1000); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值