Stream.setTimeout()
setTimeout() задаёт, сколько миллисекунд функции вроде readBytesUntil() или parseInt() будут ждать данных из потока, прежде чем завершиться — по умолчанию 1000 мс.
Полная статья
Описание
setTimeout() управляет тем, сколько времени потоковые функции будут ждать новых данных, прежде чем завершить работу. По умолчанию это значение равно 1000 миллисекунд (1 секунда).
Тайм-аут особенно важен для функций, которые читают данные до наступления какого-либо условия: если данные перестали поступать или нужный символ так и не появился, функция не будет ждать вечно — она завершится по истечении заданного времени.
Функция входит в класс Stream и доступна во всех классах, которые его наследуют, например Wire и Serial. Подробнее об общем устройстве класса см. на странице Stream.
Синтаксис
stream.setTimeout(time)
Параметры
time: время ожидания в миллисекундах. Тип данных:unsigned long.
Возвращает
Ничего.
Какие функции используют это значение
Тайм-аут, заданный через setTimeout(), влияет на поведение следующих функций:
find()findUntil()parseInt()parseFloat()readBytes()readBytesUntil()readString()readStringUntil()
Если нужные данные не поступят в течение заданного времени, эти функции завершатся и вернут то, что успели прочитать (или пустой результат).
Где применяется
- Чтение данных от GPS-модуля или другого UART-устройства — если устройство отвечает медленно, увеличьте тайм-аут, чтобы функции вроде
readBytesUntil()успели получить полный пакет. - Парсинг числовых значений через
parseInt()илиparseFloat()— тайм-аут определяет, как долго функция будет ждать первой цифры или конца числа. - Обмен по I²C через
Wire— при работе с медленными ведомыми устройствами полезно настроить тайм-аут под реальную скорость ответа. - Интерактивный ввод через Serial Monitor — если пользователь вводит данные вручную, стандартной секунды может не хватить; имеет смысл увеличить тайм-аут до нескольких секунд.
Практические замечания
- Значение тайм-аута по умолчанию — 1000 мс. Если вы работаете с быстрым потоком данных и хотите ускорить реакцию программы, уменьшите его. Если источник данных медленный — увеличьте.
- Слишком маленький тайм-аут может привести к тому, что функции чтения будут возвращать неполные данные или пустые строки, даже если данные в итоге пришли бы.
- Слишком большой тайм-аут блокирует выполнение скетча: пока функция ждёт данных, весь остальной код стоит на месте.
setTimeout()нужно вызывать до начала чтения — изменение тайм-аута в процессе работы потоковой функции не повлияет на текущий вызов.- Параметр имеет тип
unsigned long, поэтому максимальное значение — около 4,29 миллиарда миллисекунд. На практике используют значения от нескольких десятков миллисекунд до нескольких секунд.