如何解决带有偏移设置的 Arduino MPU6050 AD0 技巧会导致数据损坏
我目前正在试验两个 MPU6050,其中 AD0 分别通过 PIN 7 和 PIN 8 连接,如果可行,我计划再添加 2 个 MPU6050。
我正在使用 i2cdevlib 的 MPU6050 库,我在一个流程中所做的是:
- 初始化一个 MPU6050 对象
- 将 MPU6050 对象设置为 0x68(低 AD0)
- 将所有设置为高,但将一个设置为低(以选择 MPU6050)
- 计算偏移和校准,将所有内容存储在数组中。 (偏移量等)
- 重复第 3 到 4 步,除非所有都已校准。
- 开始在两个 MPU 之间循环,将所有内容设置为 HIGH,将要使用的设置为低。
- 使用存储在数组中的偏移量写入 LOW(当前选定的)MPU,然后使用 getMotion6(原始数据)。
- 将选定的 MPU 写入高电平,重复步骤 6 到步骤 7。
一切正常,但是当我有一个循环来收集数据时,它给了我损坏的数据,我发现问题出在这个函数中
void loop{
for (int i = 7; i <= 8; i++) {
pinMode(i,OUTPUT);
digitalWrite( i,LOW);
// Serial.print("\nWriting pin: ");
// Serial.print(i);
// Serial.println(" to LOW");
delay(2);
int index = i - 7;
Serial.print("Offsets:\t");
Serial.print(ax_offset[index]);
Serial.print("\t");
Serial.print(ay_offset[index]);
Serial.print("\t");
Serial.print(az_offset[index]);
Serial.print("\t");
Serial.print(gx_offset[index]);
Serial.print("\t");
Serial.print(gy_offset[index]);
Serial.print("\t");
Serial.println(gz_offset[index]);
accelgyro.setXAccelOffset(ax_offset[index]);
accelgyro.setYAccelOffset(ay_offset[index]);
accelgyro.setZAccelOffset(az_offset[index]);
accelgyro.setXGyroOffset(gx_offset[index]);
accelgyro.setYGyroOffset(gy_offset[index]);
accelgyro.setZGyroOffset(gz_offset[index]);
Serial.print(accelgyro.getXAccelOffset()); Serial.print("\t");
Serial.print(accelgyro.getYAccelOffset()); Serial.print("\t");
Serial.print(accelgyro.getZAccelOffset()); Serial.print("\t");
Serial.print(accelgyro.getXGyroOffset()); Serial.print("\t");
Serial.print(accelgyro.getYGyroOffset()); Serial.print("\t");
Serial.print(accelgyro.getZGyroOffset()); Serial.println("\t");
// delay(1000);
// accelgyro.getMotion6(&ax[index],&ay[index],&az[index],&gx[index],&gy[index],&gz[index]);
int ax,ay,az,gx,gy,gz;
accelgyro.getMotion6(&ax,&ay,&az,&gx,&gy,&gz);
Serial.print("PIN ");
Serial.print(i);
Serial.print("'s data is:");
Serial.print("aX:" ); Serial.print(ax); Serial.print("\t");
Serial.print("aY:" ); Serial.print(ay); Serial.print("\t");
Serial.print("aZ:" ); Serial.print(az); Serial.print("\t");
Serial.print("gX:" ); Serial.print(gx); Serial.print("\t");
Serial.print("gY:" ); Serial.print(gy); Serial.print("\t");
Serial.print("gZ:" ); Serial.println(gz);
pinMode(i,INPUT_PULLUP);
}
}
前几个循环将返回准确的数据(例如,所有传感器都接近 0 [无运动])
我怀疑是因为两个传感器之间存在巨大差异,而且 getMotion6 正在与旧传感器进行比较,是这样吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。