我在尝试将加速器的G值从int更改为float时遇到问题。当我简单地将变量类型从int更改为float时,它的串行输出在静止时看起来像这样:

-26844 -17153 -26844
mph/s: -0.17
-20133 -17217 -26844
mph/s: -0.17
-26844 -17153 -26844
mph/s: -0.17
-20133 -17217 -26844
mph/s: -0.17
-20133 -17217 -26844
mph/s: -0.17
-20133 -17217 -26844
mph/s: -0.17
-20133 -17217 -26844
mph/s: -0.17


当它只是一个普通的int变量类型时,它看起来很正常:

0 0 1
mph/s: 0
0 0 1
mph/s: 0
0 0 1
mph/s: 0
0 0 1
mph/s: 0
0 0 1
mph/s: 0
0 0 1
mph/s: 0


但是,我需要使用G值的浮点形式,以便可以准确计算出mph / s。

编辑:出于机密原因,完整的代码已被删除。

  //we send the x y z values as a string to the serial port
  sprintf(str, "%d %d %d", xg, yg, zg);
  Serial.print(str);
  Serial.write(10);

  Serial.print("mph/s: ");
  Serial.println(mphs);

  //It appears that delay is needed in order not to clog the port
  delay(15);
}

最佳答案

在我看来,问题在于sprintf语句。您正在将%d的float Xg,Yg和Zg转换为sprintf()。

Stack Overflow中有一个旧帖子处理类似的问题。
Check that out

10-02 06:23