Serial.getTimeout()
Serial.getTimeout() возвращает текущий таймаут ожидания данных (в мс) — значение типа unsigned long, установленное через Serial.setTimeout().
Полная статья
Описание
Serial.getTimeout() позволяет узнать, какой таймаут в данный момент установлен для операций чтения из последовательного порта. Это значение задаётся с помощью Serial.setTimeout() и определяет, сколько миллисекунд функции вроде readString() или parseInt() будут ждать поступления данных.
По умолчанию таймаут равен 1000 мс. Если вы меняете его в ходе работы программы, getTimeout() поможет убедиться, что нужное значение действительно установлено — это особенно удобно при отладке.
Serial.getTimeout() наследуется от класса Stream.
Синтаксис
Serial.getTimeout()
Параметры
Serial — объект последовательного порта. Список доступных портов для каждой платы смотрите на странице Serial.
Возвращает
Текущее значение таймаута, ранее установленное через Serial.setTimeout(). Тип данных: unsigned long.
Пример кода
Следующий скетч изменяет таймаут по умолчанию и предлагает ввести что-нибудь в Serial Monitor за отведённое время:
void setup() {
Serial.begin(9600);
while (!Serial); // Ожидание готовности Serial (для плат с USB)
Serial.print("Current timeout (ms): ");
Serial.println(Serial.getTimeout()); // Вывод таймаута по умолчанию (должно быть 1000)
Serial.setTimeout(5000); // Установка пользовательского таймаута (5 секунд)
Serial.print("New timeout set to: ");
Serial.println(Serial.getTimeout()); // Теперь должно быть 5000
Serial.println("Type something within 5 seconds:");
}
void loop() {
char buffer[20];
int bytesRead = Serial.readBytes(buffer, sizeof(buffer) - 1); // Ожидание до истечения таймаута
if (bytesRead > 0) {
buffer[bytesRead] = '\0'; // Завершение строки нулевым символом
Serial.print("Received: ");
Serial.println(buffer);
} else {
Serial.println("Timeout! No data received.");
}
delay(3000);
}
Где применяется
- Проверка конфигурации — убедиться, что
setTimeout()сработал корректно, прежде чем начать ждать данные. - Адаптивный приём — в сложных протоколах, где таймаут меняется в зависимости от режима работы,
getTimeout()позволяет сохранить текущее значение, изменить его временно, а затем восстановить. - Отладка — вывести текущий таймаут в Serial Monitor, чтобы понять, почему функции чтения завершаются раньше или позже ожидаемого.
Практические замечания
- Если вы ни разу не вызывали
setTimeout(),getTimeout()вернёт1000— это значение по умолчанию. - Возвращаемый тип
unsigned longозначает, что значение всегда неотрицательное; передавать отрицательное число вsetTimeout()не имеет смысла. - Функция не блокирует выполнение программы и не взаимодействует с буфером — она просто читает сохранённое число.
- Если вы работаете с несколькими последовательными портами (например,
Serial1,Serial2), каждый из них хранит собственное значение таймаута, иgetTimeout()нужно вызывать для нужного объекта. - Слишком маленький таймаут (например, 10–50 мс) может приводить к тому, что функции чтения возвращают пустую строку или неполные данные —
getTimeout()поможет быстро диагностировать эту ситуацию.