如何使用Arduino的Serial.println打印带有浮点数的字符串

时间:2015-11-26 04:47:38

标签: c++ string casting arduino

我一直在使用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

2 个答案:

答案 0 :(得分:0)

首先,在所有测试中都有一个额外的开放式括号。

接下来,正如错误所示,您正在尝试将float值添加到String类型。文档说+运算符只支持将两种String类型一起添加。

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

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

你给出的最后一个例子给出了类似的错误'根据文档,当你删除额外的开放式支架时看起来它应该工作。

编辑:参考新的错误消息">>调用重载'String(float&)'是不明确的"你可以粘贴一些额外的代码至少显示: - some_float和some_value的定义 - 您包括的任何名称空间(例如std等) 通常有这些问题,您应该将代码减少到最简单的示例,该示例显示错误并在线程中发布整个示例。 (通常当你把它简化为最简单的例子时,你就会知道问题是什么!)

错误说String(float&)是不明确的,所以我猜你有另一个带有字符串定义的命名空间,它与Arduino版本冲突。

答案 1 :(得分:0)

它应该是别的东西。我现在尝试使用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
...