Как очистить входной последовательный буфер в Arduino?
Я общаюсь с модулем Wi-Fi esp8266 с помощью Arduino. Модуль возвращает запросы GET от других клиентов. Они будут иметь форму
GET /101011 HTTP/1.1\r\nHost...
Я хочу извлечь только 101011
из полученных последовательных данных и отбросить остальные. Я придумал этот небольшой фрагмент кода, чтобы проверить его, отправив данные с моего ноутбука.
Это код:
String s;
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available())
{
Serial.println("Inside");
Serial.find("/");
s = Serial.readStringUntil(' ');
Serial.println(s);
// Отбросьте остальные данные . Фрагмент из блога Джереми Блюма
while(Serial.available()>0) Serial.read();
}
}
Блог Джереми
Но когда я запускаю это с помощью ввода GET /101011 HTTP/1.1\r\n
, вывод получается
Inside
101011
Inside
1.1\r\n
Почему Serial.available()
возвращает значение true
даже после прочтения всего? Как удалить остальные данные из буфера последовательного ввода?
@Ray, 👍-1
Обсуждение1 ответ
Один из возможных подходов состоит в том, чтобы прочитать и отбросить все в течение определенного времени, например секунды. Например:
unsigned long now = millis ();
while (millis () - now < 1000)
Serial.read (); // считайте и отбрасывайте любые входные данные
Я не большой поклонник попыток "очистить входной буфер". Как вы узнаете, достаточно ли секунды? Или, может быть, это слишком долго? Вам лучше прочитать какой-нибудь известный разделитель.
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Serial1' was not declared in this scope
- Очень простая операция Arduino Uno Serial.readString()
- AT-команда не отвечает на последовательный монитор
Откуда вы знаете, что прочитали все? Последовательные данные все еще поступают с ESP8266, пока вы очищаете буфер, и вы очищаете его намного быстрее, чем поступают данные. Помните: серийные данные поступают *s...l...o...w...l...y...*, @Majenko
Прочтите это:~ https://hackingmajenkoblog.wordpress.com/2016/02/01/reading-serial-on-the-arduino/, @Majenko
@Majenko Спасибо тебе. Почитайте свой блог. Постараюсь воплотить это в своем дизайне., @Ray