Как удалить входящие пакеты Xbee из буфера?
Мне необходимо получить определенный пакет подтверждения после команды моему передающему Xbee прекратить отправку обычных пакетов.
Когда это произойдет, в моем буфере все еще будут обычные пакеты, поэтому в следующий раз, когда я вызову readPacket (), я не хочу их видеть. Поэтому прямо перед тем, как я вызову команду "Стоп", я пытаюсь очистить входящий буфер следующим образом:
void burnSerial(void) {
while (xbee.readPacket(20)) {
xbee.getResponse().getRx16Response(rx16);
} //прочитайте все доступные ответы
// делайте это только тогда, когда нет постоянного потока ответов, иначе он может зависнуть.
while (Serial.available()) { Serial.read(); }
//записать все, что может быть в последовательном буфере
}
Но это не работает. В следующий раз, когда я вызову xbee.readPacket ()
, я увижу тонны обычных пакетов, прежде чем, наконец, увижу свой пакет подтверждения. Почему эти функции вообще ничего для меня не делают?
1 ответ
Это означает, что между выдачей команды и получением подтверждения действия команды проходит много времени. Когда вы отправляете команду, лучше всего подождать и прочитать пакеты, пока не найдете подтверждение, а затем вернуться из функции или сделать все, что вы хотите сделать. Нет необходимости в отдельной функции burnSerial ()
, и вам не следует слепо отбрасывать данные. Таким образом, в принципе, последовательность операций должна быть следующей:
- Отправьте команду
- Считывайте пакеты, пока не найдете идентификационный маркер "подтверждение"
- Возвращение или выход
Это предполагает, что ваш передатчик отправляет подтверждение только после того, как он остановил поток.
- Как подключиться к Arduino с помощью WiFi?
- В чем разница между вариантами RF (wifi, xbee, NRF24L01)
- Как синхронизировать несколько ардуино?
- Считывание трех сигналов, последовательно отправляемых по Simulink с Arduino
- Какова функция переключателя XBee/USB на XBee shield?
- Использование Arduino wireless SD Shield для сохранения данных на SD-карту и отправки на ПК по беспроводной сети
- Проблемы с аппаратным последовательным интерфейсом (UART) на Nano 33 BLE Sense
- Serial.read() не работает в инструкции IF