sscanf в Arduino ловит только последний 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] = '\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++;
  }
}

person cujo    schedule 02.09.2015    source источник
comment
возможно, ваша ошибка где-то еще ... Я попробовал ваш код (я просто удалил \n в конце строки формата, потому что мне пришлось проверить другой символ, поскольку мой эмулированный последовательный монитор не поддерживал новые строки), и он работал, как ожидалось (got (1, 2, 3), когда я отправил (1, 2, 3)). Попробуйте показать нам также свои функции чтения   -  person frarugi87    schedule 02.09.2015


Ответы (1)


Проблема заключалась в типах данных, которые я использовал для цветовых переменных. По какой-то причине sscanf не понравился uint8_t, когда я переключил их на uint16_t, он работал нормально.

person cujo    schedule 02.09.2015