Проверил на реальном железе - код полностью рабочий! А вот почему у меня не работало. Выявлено отладкой.
Функция Serial.available() даже при вычитывании в переменную ( int n = Serial.available(); ) выдаёт всякую фигню о количестве байт в буфере. Очень редко там появляются правильные значения. Т.е. её можно использовать только как логический флаг true-false, сообщающий, что буфер не пуст (или пуст). И вот если буфер не пуст, то его надо вычитывать, что бы определить, сколько же там байт было. Твой алгоритм именно это и делает.
Хотя описание функции такое:
Serial.available()
Функция получает количество байт(символов) доступных для чтения из последовательного интерфейса связи. Это те байты которые уже поступили и записаны в буфер последовательного порта. Буфер может хранить до 64 байт.





Ответить с цитированием