【问题标题】:How to print strings with floats using Arduino's Serial.println如何使用 Arduino 的 Serial.println 打印带有浮点数的字符串
【发布时间】:2015-11-26 04:47:38
【问题描述】:

我一直在使用 Arduino 的 Serial.println() 打印字符串和数字的组合,例如:

Serial.println(((String)"some value: " + some_value);

这似乎适用于大多数类型,但对于浮点数失败,这给了我编译错误:

“operator+”的模糊重载(操作数类型为“String”和“float”)

我尝试过不同的调用,例如:

Serial.println(((String)"some float:" + ((String)some_float));
Serial.println(((String)"some float: " + String(some_float));
Serial.println(((String)"some float: " + String(some_float, 2));

但他们给出了类似的错误。 Arduino 在String 上的文档似乎暗示这些应该有效。我做错了什么?

更新

纠正我原来的错误后,我现在遇到了这个问题:

Serial.println(String("some value: ") + String(some_value));
>> call of overloaded ‘String(float&)’ is ambiguous

我也试过了:

Serial.println(String("some float: ") + String(some_float, 2));
>> call of overloaded ‘String(float&, int)’ is ambiguous

【问题讨论】:

  • 不建议编辑问题以适应回复,否则稍后阅读问题的人(如我)将不知道为什么有人回答它。只需留下原始问题,然后添加一个 EDIT 字符串并进行修改,解释您修改的原因以及为什么它不起作用(例如“我第一次复制错误,但这是我使用的代码,它有相同的错误")
  • @frarugi,我同意。但是,我的问题出现了令人困惑的错误,并且提供的解决方案是错误的。
  • 是的,但现在它更具可读性,因此答案可以更精确
  • 我发布了一个答案。也许还有其他问题,因为我发布的代码有效

标签: c++ string casting arduino


【解决方案1】:

应该是别的东西。我现在用 Arduino UNO 尝试了这段代码:

float some_float;

void setup() {
  Serial.begin(9600);
  some_float = 13.3558;
}

void loop() {
  Serial.println(String("some float: ") + String(some_float, 2));
  delay(1000);
}

输出是

some_float: 13.35
some_float: 13.35
some_float: 13.35
...

【讨论】:

    【解决方案2】:

    首先,您在所有测试中都有一个额外的左括号。

    接下来,正如错误所说,您正在尝试将浮点值添加到 String 类型。文档说 + 运算符仅支持将两个 String 类型相加。

    您需要将浮点数转换为字符串,然后将两个字符串相加。您链接的文档页面上有一个示例:

    String stringOne = String(5.698, 3); // 使用浮点数和小数位

    根据文档,您给出的最后一个给出“类似错误”的示例看起来在您删除额外的左括号时应该可以工作。

    编辑:参考新的错误消息“>> call of overloaded ‘String(float&)’ is ambiguous”你可以粘贴一些额外的代码来至少显示: - some_float 和 some_value 的定义 - 您包含的任何命名空间(例如 std 等) 通常对于这类问题,您应该将代码简化为显示错误的最简单示例,并将整个示例发布到线程中。 (很多时候,当您将其简化为最简单的示例时,您就会知道问题出在哪里!)

    错误表明 String(float&) 是不明确的,所以我猜你有另一个名称空间,其中包含与 Arduino 版本冲突的字符串定义。

    【讨论】:

    • 左括号是我帖子中的错字,但不是我的代码。否则我会得到一个非常不同的错误。该代码仍然不起作用。
    • 您能否提供第三个替代行中的“类似”错误之一? Serial.println(String("some float: ") + String(some_float, 2));
    猜你喜欢
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多