【问题标题】:Converting G values into floats from an Arduino accelerometer将 G 值从 Arduino 加速度计转换为浮点数
【发布时间】:2014-07-08 01:01:40
【问题描述】:

我在尝试将加速器中的 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);
}

【问题讨论】:

  • 你能显示你用于浮点版本的确切代码吗?请注意,具有 %d 格式的 sprintf 不适用于他们。

标签: c arduino accelerometer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在您的代码示例中,xgygzg 都是浮点数。 printf 对不同的数据类型使用不同的格式说明符。 "%d" 用于整数值,"%f" 用于单精度浮点值。

    将您的代码更改为:

        //we send the x y z values as a string to the serial port
        sprintf(str, "%f %f %f", xg, yg, zg);
    

    您可以在此处查看其他格式说明符:printf Type Field Characters

    编辑:似乎 Arduino 默认不链接浮点库。您需要按照此处所述启用它们:Arduino: printf/fprintf prints question mark instead of float

    【讨论】:

    • 不行,出来是这样的:? ? ?英里/秒:0.34 ? ? ?英里/秒:0.17 ? ? ?英里/秒:0.34 ? ? ?英里/秒:0.17
    • 好的,这有道理,但是我到底应该把链接器标志代码放在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2020-02-03
    • 1970-01-01
    • 2011-11-17
    • 2020-11-12
    • 2021-12-17
    相关资源
    最近更新 更多