Я пытаюсь отправить некоторые числа через последовательный порт со своего компьютера на свой 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++;
}
}
\n
в конце строки формата, потому что мне пришлось проверить другой символ, поскольку мой эмулированный последовательный монитор не поддерживал новые строки), и он работал, как ожидалось (got (1, 2, 3)
, когда я отправил(1, 2, 3)
). Попробуйте показать нам также свои функции чтения - person frarugi87   schedule 02.09.2015