Serial::Available()
не блокируется.Если есть доступные символы, будет вызван readStringUntil()
, но он не вернется, пока не станет доступной новая строка - так, вероятно, произойдет блокировка ввода.
Возможно, следующее безопаснееНеблокирующее решение:
void checkIncomingOrder()
{
char ch = 0 ;
while( ch != '\n' && Serial.available() > 0 )
{
Serial.readBytes( &ch, 1 ) ;
order += ch ;
}
if( ch == '\n' )
{
Serial.println("Order is: " + order) ;
order = "" ;
timer = 0 ;
}
}
Позволяет проверять строку ввода непрерывно, а не каждые три секунды, что делает решение более отзывчивым:
void loop()
{
checkIncomingOrder();
}
, что, в свою очередь, позволяетtimer
переменная для удаления.