Главная chevron_right Функции chevron_right Связь chevron_right Stream.flush()

Stream.flush()

flush() приостанавливает выполнение скетча и ждёт, пока все данные из исходящего буфера не будут полностью переданы — полезно перед сбросом устройства или переходом в сон.

Полная статья

Описание

flush() — это метод класса Stream, который приостанавливает выполнение скетча и ждёт, пока все данные из выходного буфера не будут переданы получателю. Только после этого программа продолжает работу.

По умолчанию функции вроде Serial.print() или Serial.write() помещают данные в буфер и возвращают управление немедленно, не дожидаясь фактической отправки. Это удобно для скорости, но иногда важно убедиться, что данные действительно ушли — например, перед переходом в режим сна, сбросом устройства или закрытием соединения. Именно для таких случаев и нужен flush().

Метод доступен во всех классах, которые наследуют Stream, — в частности, Wire и Serial. Подробнее о классе см. на странице Stream.

Синтаксис

stream.flush()

Параметры

Нет.

Возвращает

Ничего.

Где применяется

  • Перед сбросом или переходом в сон. Если скетч уходит в глубокий сон или вызывает программный перезапуск, вызов flush() гарантирует, что последнее сообщение в Serial Monitor дойдёт до адресата, а не зависнет в буфере.
  • Протоколы с подтверждением. Когда одно устройство отправляет команду другому и сразу ждёт ответа, полезно убедиться, что команда полностью ушла до начала чтения.
  • Отладка критичных участков. Если в Serial Monitor пропадают последние строки лога перед сбоем, добавление flush() после вывода помогает понять, что именно успело отправиться.

Практические замечания

  • flush() блокирует выполнение программы. Если буфер большой или скорость передачи низкая, задержка может быть заметной. Не вызывайте его в каждой итерации цикла без необходимости.
  • При работе с Serial скорость передачи задаётся в Serial.begin(). Чем ниже baud rate, тем дольше будет ждать flush().
  • Не путайте flush() с очисткой входного буфера. Этот метод относится только к исходящим данным. Для сброса входящих данных используется другой подход.
  • Если данные и так успевают уйти до следующей операции, явный вызов flush() избыточен и только замедляет программу.