arduino 中的 sscanf 只捕获最后一个 int
sscanf in arduino is only catching last int
我正在尝试通过串行端口从我的计算机向我的 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] = '[=12=]';
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++;
}
}
问题是我用于颜色变量的数据类型。出于某种原因,sscanf 不喜欢 uint8_t,当我将它们切换到 uint16_t 时,它工作正常。
我正在尝试通过串行端口从我的计算机向我的 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] = '[=12=]';
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++;
}
}
问题是我用于颜色变量的数据类型。出于某种原因,sscanf 不喜欢 uint8_t,当我将它们切换到 uint16_t 时,它工作正常。