Таймер — счётчик внутри микроконтроллера, который тикает с заданной частотой. Он умеет: отсчитывать время, генерировать ШИМ, считать внешние импульсы, вызывать прерывания.
Прерывание — событие, которое останавливает основной цикл и запускает обработчик. Такты, кнопки, UART, АЦП, таймеры — всё это источники прерываний.
Зачем: без таймеров и прерываний микроконтроллер только опрашивает входы в цикле, и точность зависит от того, чем он занят. С таймером — точность от кварца, независимо от кода.
Пример: мигание раз в секунду через delay(1000) работает плохо (цикл блокируется), а через таймер — точно и без блокировки.
Типичные задачи: считать время между событиями (измерение длительности импульса), генерировать ШИМ на нескольких каналах, опрашивать АЦП с фиксированной частотой, программные часы, антидребезг, watchdog (сброс при зависании).
Правила обработчика прерывания:
— Коротко. Микросекунды, не миллисекунды.
— Никаких delay и Serial.print внутри (они сами на прерываниях).
— Общие переменные с основным циклом помечать volatile.
— Не вызывать тяжёлые функции и не работать с памятью, если можно отложить.
— Менять только флаг или счётчик, а логику делать в loop().
Тонкость: у ESP32 прерывания на всех пинах, но обработчик выполняется в отдельной задаче, и есть ограничения FreeRTOS. У AVR — классические ISR, где даже millis() внутри может не тикать.
И ещё: watchdog — это тоже таймер. Если основной цикл завис и не «покормил» его, микроконтроллер перезагрузится. Для устройств, которые работают месяцами без присмотра, это обязательно.
Без таймеров и прерываний не сделать ни точных измерений, ни отзывчивого интерфейса.
Сделай мигание светодиодом на таймере без delay: настрой прерывание на 1 Гц и переключай пин в обработчике. Основной цикл при этом свободен.
Проверь себя
Почему нельзя ставить delay() внутрь обработчика прерывания?
Обработчик блокирует всё остальное, включая другие прерывания и основной цикл. delay на 100 мс означает, что 100 мс система не реагирует ни на что. Кроме того, некоторые функции Arduino внутри используют прерывания и просто зависнут.
-
Wikipedia: Timer
таймеры
-
ESP-IDF: GPIO и прерывания
прерывания и их обработка