Трудности с использованием Serial.availible

VAF

✩✩✩✩✩✩✩
15 Июл 2023
50
1
Москва
Простейшая программа, использующая SerialPlotter https://esp32io.com/tutorials/esp32-web-plotter

в которой идет заполнение массива, если в это время не идет показ данных. Предполагалось, что показ начинается с посылки сигнала с Serial, по окончании показа будет продолжено пополнение массива, а возобновление показа потребует повторного посыла из Serial.

Оказалось, что после запуска Плоттера, показ идет без остановок. После вставленной паузы вновь выдается тот же массив с увеличеным количетвом элементов.

Как получить режим, в котором для повторения показа нужен второй ввод Serial.
 

Вложения

  • 808 байт Просмотры: 2

asaitov

✩✩✩✩✩✩✩
16 Янв 2024
16
6
Данные, которые ты посылаешь в Serial, сохраняются в буфере, пока ты их оттуда не прочитаешь. Serial.available() возвращает количество байт в буфере, которые ты еще не прочитал, поэтому если ты не будешь читать из буфера, Serial.available() всегда будет больше нуля, если ты что-то туда пошлешь хотя бы один раз.

Так что тебе просто нужно очистить буфер, прочитав всё, что в нем есть. Примерно так:

C++:
if (Serial.available() > 0) {
  while (Serial.available()) Serial.read(); // пока в буфере что-то есть, читаем из него
  // дальше всё остальное
}
 
  • Лойс +1
Реакции: VAF