我正在使用GY-521转接板来获取它的加速度计数据。据我所知,我应该从它得到有符号(正负)的值,但我得到的值是从0到65535。
下面是我得到的结果:
当传感器平放在桌子上时,我的Z轴读数约为预期的16384。当我在任何方向上旋转传感器直到90度时,该值下降到0。一旦我旋转超过90°,这个值就会跳到65500左右,当我继续旋转时,一旦传感器颠倒(所以180°),它就会下降到50000左右。
所以在我看来,在旋转的前半部分,我得到了期望值,但是在降到0之后,它不是得到负值,而是跳到无符号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);
} 发布于 2019-05-02 23:10:51
好的,我找到了一个适合我的解决方案。
我必须将变量AccX、AccY和AccZ定义为"int16_t“。这通过Wire函数给出了期望的有符号的值。
这是一种变通方法,因为我想将这些值缩放到十进制数,所以我需要创建另一组变量,我将其定义为浮点数。
如果有人能解释为什么我必须以这种方式定义变量,或者更好地解决这个问题,我将很高兴听到。
现在,我可以使用我已有的东西。
https://stackoverflow.com/questions/55775335
复制相似问题