我试图通过串口将一些数字从我的计算机发送到我的arduino,并且我使用sscanf来解析字符串中的数字。检测系统工作正常,但由于某种原因,sscanf只抓取消息中的最后一个数字。以下是失败的代码。红色,绿色和蓝色是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++;
}
}
答案 0 :(得分:0)
问题是我用于颜色变量的数据类型。出于某种原因,sscanf不喜欢uint8_t,当我将它们切换到uint16_t时,它工作正常。