Цитата Сообщение от SoftWareGuy Посмотреть сообщение
Исправленный код:
Проверил на реальном железе - код полностью рабочий! А вот почему у меня не работало. Выявлено отладкой.

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

Хотя описание функции такое:

Serial.available()

Функция получает количество байт(символов) доступных для чтения из последовательного интерфейса связи. Это те байты которые уже поступили и записаны в буфер последовательного порта. Буфер может хранить до 64 байт.