Как удалить входящие пакеты Xbee из буфера?

Мне необходимо получить определенный пакет подтверждения после команды моему передающему Xbee прекратить отправку обычных пакетов.

Когда это произойдет, в моем буфере все еще будут обычные пакеты, поэтому в следующий раз, когда я вызову readPacket (), я не хочу их видеть. Поэтому прямо перед тем, как я вызову команду "Стоп", я пытаюсь очистить входящий буфер следующим образом:

void burnSerial(void) {
  while (xbee.readPacket(20)) {
    xbee.getResponse().getRx16Response(rx16);
  } //прочитайте все доступные ответы
    // делайте это только тогда, когда нет постоянного потока ответов, иначе он может зависнуть.

  while (Serial.available()) { Serial.read(); }
  //записать все, что может быть в последовательном буфере
}

Но это не работает. В следующий раз, когда я вызову xbee.readPacket (), я увижу тонны обычных пакетов, прежде чем, наконец, увижу свой пакет подтверждения. Почему эти функции вообще ничего для меня не делают?

, 👍1


1 ответ


1

Это означает, что между выдачей команды и получением подтверждения действия команды проходит много времени. Когда вы отправляете команду, лучше всего подождать и прочитать пакеты, пока не найдете подтверждение, а затем вернуться из функции или сделать все, что вы хотите сделать. Нет необходимости в отдельной функции burnSerial (), и вам не следует слепо отбрасывать данные. Таким образом, в принципе, последовательность операций должна быть следующей:

  • Отправьте команду
  • Считывайте пакеты, пока не найдете идентификационный маркер "подтверждение"
  • Возвращение или выход

Это предполагает, что ваш передатчик отправляет подтверждение только после того, как он остановил поток.

,