arduino中的sscanf只捕获最后一个

时间:2015-09-02 03:19:33

标签: arduino serial-port arduino-ide

我试图通过串口将一些数字从我的计算机发送到我的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++;
  }
}

1 个答案:

答案 0 :(得分:0)

问题是我用于颜色变量的数据类型。出于某种原因,sscanf不喜欢uint8_t,当我将它们切换到uint16_t时,它工作正常。