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 时,它工作正常。