我正在使用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);
}
答案 0 :(得分:0)
好,所以我找到了适合我的解决方案。
我必须将变量AccX,AccY和AccZ定义为“ int16_t”。这给 通过Wire函数获得期望的有符号值。
这是一个变通办法,因为我想将这些值缩放为十进制数字,所以我需要创建另一组变量,直到我定义为float为止。
如果有人可以解释为什么我必须以这种方式定义变量,或者更好地解决这个问题,那么我很高兴听到这个消息。
目前,我可以使用已有的东西。