【发布时间】:2015-09-02 03:19:32
【问题描述】:
我正在尝试通过串行端口将一些数字从我的计算机发送到我的 arduino,并且我正在使用 sscanf 来解析字符串中的数字。检测系统工作正常,但由于某种原因 sscanf 仅从消息中获取最后一个数字。下面是失败的代码。 Red、Green 和 Blue 是 uint8_t 变量。
else if (sscanf(message, "(%u, %u, %u)\n", &red, &green, &blue) == 3)
{
sprintf(debug, "got (%d, %d, %d)\n", red, green, blue);
Serial.println(message);
Serial.print(debug);
如果我发送“(1, 2, 3)”,此代码将运行并打印以下内容
(1, 2, 3)
got (0, 0, 3)
为什么只解析最后一个数字?
编辑
下面是其余的串口读取代码
while (Serial.available() > 0)
{
message[str_postion] = Serial.read();
if (message[str_postion] == '\n')
{
message[str_postion + 1] = '\0';
str_postion = 0;
if (message[0] == 'T')
{
Serial.print("GREEN!\n");
}
else if (sscanf(message, "(%d, %d, %d)\n", &red, &green, &blue) == 3)
{
sprintf(debug, "got (%d, %d, %d)\n", red, green, blue);
Serial.println(message);
Serial.print(debug);
target_color[0] = red;
target_color[1] = green;
target_color[2] = blue;
}
else
{
Serial.print("PARSE\n");
}
}
else
{
str_postion++;
}
}
【问题讨论】:
-
可能你的错误在其他地方。我尝试了你的代码(我刚刚删除了格式字符串末尾的
\n,因为我必须测试另一个字符,因为我的模拟串行监视器做了不支持新行)并且它按预期工作(当我发送(1, 2, 3)时got (1, 2, 3))。尝试向我们展示您的阅读功能
标签: arduino serial-port arduino-ide