Почему пропадают байты, отправленные через com на ардуино?

Возникла проблема: при пересылке данных на ардуино периодически пропадают 1-2 байта информации. Для проверки отправлял несколько раз одну и ту же строку. Как можно видеть ниже, верный результат получился лишь единожды. Отладочный вывод и код прилагаю. Это я такой криворук, или косяк в чем-то другом?

Проблемный участок кода
char inpbyte,rowbyte1, rowbyte2;
int row = 0;
int x = 0;
while (true) {
  
  if (Serial.available() > 0)
   {
        inpbyte = Serial.read();       //читаем байт из буфера
        if (inpbyte == 'Z') {              // проверка на признак новой строки битмапа
          TV.clear_screen();
          Serial.println("--------------------"); 
          Serial.println("New string ");   //плюемся в монитор порта отладочной строкой
          
          rowbyte1= Serial.read();        //читаем первый hex-символ номера строки
          rowbyte2= Serial.read();        //читаем второй hex-символ номера строки
          row = ReadHexByte(rowbyte1,rowbyte2);    //преобразовываем символы в номер строки   
          
          Serial.println(rowbyte1);   //плюемся в монитор порта отладочной строкой
          Serial.println(rowbyte2);   //плюемся в монитор порта отладочной строкой
          
          Serial.write("Row ");          //плюемся в монитор порта отладочной строкой
          Serial.println(row,HEX);    //плюемся в монитор порта отладочной строкой с номером строки
          
          TV.print(10,10,row);           //выводим номер строки на тв. чтоб наверняка
          
          x=0;    //сбрасываем счетчик пикселей в строке

        }
        else {                                                  //если конца строки не предвидится,
             TV.set_pixel(x,row, inpbyte-'0');     //то выводим пиксель соответствующего цвета (0 или 1)
             x++;                                               //накидываем счетчик пикселей, чтоб не топтаться на месте
        
        
        }

   }

}


Отладочный вывод в мониторе порта (всё время отправлял одну и ту же строку: Z0123)
--------------------
New string 
0
3
Row 3
--------------------
New string 
0
3
Row 3
--------------------
New string 
0
2
Row 2
--------------------
New string 
0
1
Row 1
--------------------
New string 
0
3
Row 3
  • Вопрос задан
  • 2718 просмотров
Пригласить эксперта
Ответы на вопрос 1
gbg
@gbg Куратор тега Arduino
Любые ответы на любые вопросы
Код жутко кривой. Нужно менять архитектуру - не наворачивать такты впустую в ожидании байта, а реагировать только на прерывание.

Ну и код отправлялки посмотреть, может там нет проверки на ошибку при отправке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы