我正在使用 GY-521 分线板在 3.6 英寸上获取加速度计数据。据我了解,我应该期望它有带符号的(正负)值,但我得到的值是 0 到 65535。
所以这就是我得到的:
当传感器平放在桌子上时,我的 Z 轴读数约为预期的 16384。当我向任何方向旋转传感器直到 90 度时,值下降到 0。一旦我转动超过 90°,值就会跳跃高达 65500 左右,当我继续旋转时,一旦传感器倒置(所以 180°),它就会下降到 50000 左右。
所以在我看来,在旋转的前半部分,我得到了预期值,但是在下降到零后没有得到负值,而是跳转到无符号 16 位的最大值。
对于 X 和 Y 轴,我得到了类似的结果,但旋转了 90 度。因此,当传感器平放在桌面上时,两个轴的读数均为 0。当我向一个方向转动传感器时,该值在 90° 时上升到 16384,然后在 180° 后下降到 0。如果我向另一个方向转动传感器,该值会上升到 65500 左右,然后在 90° 时下降到 50000,然后在 180° 时回到 65500。
这是我使用的整个代码:
#include <Wire.h>
const int MPU = 0x68; // MPU6050 I2C address
float AccX, AccY, AccZ;
void setup() {
Serial.begin(19200);
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0b00000000);
Wire.endTransmission();
Wire.beginTransmission(0b1101000);
Wire.write(0x1C);
Wire.write(0b00000001);
Wire.endTransmission();
}
void loop() {
Wire.beginTransmission(MPU);
Wire.write(0x3B);
Wire.endTransmission();
Wire.requestFrom(MPU, 6, true);
AccX = (Wire.read()<<8|Wire.read());
AccY = (Wire.read()<<8|Wire.read());
AccZ = (Wire.read()<<8|Wire.read());
Serial.print(AccX);
Serial.print(",");
Serial.print(AccY);
Serial.print(",");
Serial.println(AccZ);
delay(100);
}