ARDUINO Почему не читается серийный порт, если делать это не каждый такт?

tamtakoe

✩✩✩✩✩✩✩
23 Апр 2022
5
0
St. Petersburg
C++:
void readSerial() {
  if (Serial.available() > 0) {
     ...

     Serial.println(Some data from serial buffer);
  }
}
Стандартная функция чтения серийного порта. Если поместить ее в loop(), то всё работает, но если... Так же оставить ее в loop(), но вызывать каждые 500 мс, например, то никакие данные не приходят. Почему так? Думал, что данные кладутся в буфер и ждут, когда их прочитают.
 

bort707

★★★★★★✩
21 Сен 2020
3,064
912
если оставить ее в loop(), но вызывать каждые 500 мс, например, то никакие данные не приходят. Почему так? Думал, что данные кладутся в буфер и ждут, когда их прочитают
потому что на скорости 9600 за 500мс по сериал приходит 500 байт, а размер буфера всего 32 байта.
Вывод - сериал надо читать не раз в 500мс, а не реже 10мс
 

tamtakoe

✩✩✩✩✩✩✩
23 Апр 2022
5
0
St. Petersburg
@bort707, А если данных нет, то буфер тоже переполняется? Этот тот сериал, в который я пишу из монитора порта в IDE
 

tamtakoe

✩✩✩✩✩✩✩
23 Апр 2022
5
0
St. Petersburg
Разобрался. Дело в том, что я запускал опрос порта с помощью функции timer.every из этой библиотеки https://github.com/contrem/arduino-timer
А она не запускала функцию в интервале, если не вернуть из функции true. В общем, сам дурак, затащил в проект написанные школотой либы(