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()избыточен и только замедляет программу.