首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPU 6050加速度计发送16位无符号值

MPU 6050加速度计发送16位无符号值
EN

Stack Overflow用户
提问于 2019-04-21 00:11:47
回答 1查看 274关注 0票数 0

我正在使用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。

下面是我使用的完整代码:

代码语言:javascript
复制
#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);
}   
EN

回答 1

Stack Overflow用户

发布于 2019-05-02 23:10:51

好的,我找到了一个适合我的解决方案。

我必须将变量AccX、AccY和AccZ定义为"int16_t“。这通过Wire函数给出了期望的有符号的值。

这是一种变通方法,因为我想将这些值缩放到十进制数,所以我需要创建另一组变量,我将其定义为浮点数。

如果有人能解释为什么我必须以这种方式定义变量,或者更好地解决这个问题,我将很高兴听到。

现在,我可以使用我已有的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55775335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档