Проблема с входом от последовательного монитора

У меня есть фрагмент кода, как показано, и я хочу распечатать значение, которое я отправляю с помощью последовательного монитора, вместе с сообщением: "Запись данных в ведомое устройство...".

Но каждый раз, когда я ввожу символ/число в последовательный монитор (например, 'a', как показано), цикл выполняется два раза, а не один раз. Похоже, что дополнительный символ (несколько невидимый или нулевой) отправляется вместе с введенным символом.

Если я использую условие (Serial.available()>1), то цикл выполняется только один раз при отправке одного символа.

Почему так?

, 👍-1

Обсуждение

Пожалуйста, скопируйте код в виде текста вместо плохих дампов экрана., @Michel Keijzers


1 ответ


Лучший ответ:

0

Я подозреваю, что отправляется символ конца строки (вероятно, \n или \r, см. комментарий Эдгара Боне) или конец строки (символ 0).

Это легко узнать, напечатав целочисленное значение символа:

char c = serial.read();
Serial.print((int) c);
,

На самом деле '\n' = 10 (он же LF, перевод строки, новая строка), не путать с '\r' = 13 (CR, возврат каретки). И да, это '\n', о чем свидетельствует выбор «Новая строка» в раскрывающемся меню внизу. Другими вариантами этого меню являются «Без конца строки», «Возврат каретки» и «И NL, и CR». Обратите внимание, что последний вариант отправляет CR перед LF., @Edgar Bonet

@EdgarBonet Спасибо за ваше разъяснение, я выдвинул ваш комментарий. Всегда лучше проверять точные символы, которые заканчивают строку., @Michel Keijzers