Мигание без delay с использованием millis
Отслеживайте прошедшее время и запускайте задачи по расписанию.
«Мигание без delay с использованием millis» — бесплатный урок Arduino & IoT Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Arduino & IoT Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Arduino & IoT Academy содержит 4 уроков всего.
Встроенный секундомер
Функция millis возвращает количество миллисекунд, прошедших с момента включения платы. Это бесплатный секундомер, который постоянно считает время. ⏱️
unsigned long now = millis();Почему нужен unsigned long
Храните результат millis в типе unsigned long. Счётчик со временем становится очень большим, а обычный int переполнился бы менее чем за минуту.
Основная идея
Вместо паузы запомните последний момент, когда выполняли действие, а затем на каждом проходе цикла проверяйте, сколько времени прошло с тех пор.
Запомните последний момент
Используйте переменную вроде previousMillis, чтобы хранить момент последнего переключения светодиода. На каждом проходе сравнивайте её с текущим временем.
unsigned long previousMillis = 0;Задайте интервал
Выберите интервал, например 1000 миллисекунд, между миганиями. Если выполнять действие только после такого ожидания, ритм будет равномерным.
const long interval = 1000;Достаточно ли прошло времени
На каждом проходе цикла вычитайте previousMillis из текущего значения millis. Если разница не меньше заданного интервала, пора выполнять действие.
if (millis() - previousMillis >= interval) {Сбросьте таймер
Сразу после выполнения действия присвойте previousMillis текущее время. Так начнётся новый отсчёт, и до следующего мигания снова пройдёт полный интервал.
previousMillis = millis();Переключите светодиод
Внутри блока с отсчётом времени просто переключите светодиод: включите его, если он был выключен, и выключите, если он был включён. Так получится чёткое мигание.
ledState = !ledState;
digitalWrite(ledPin, ledState);Цикл никогда не останавливается
Между миганиями цикл продолжает работать на полной скорости и может читать датчики или кнопки. Ничто не замирает в ожидании.
Вычитание справляется с переполнением
Примерно через 49 дней millis снова принимает значение ноль, но приём с вычитанием по-прежнему даёт правильную разницу, поэтому отсчёт времени продолжает работать.
Многоразовый шаблон
Этот шаблон с millis подходит для любой повторяющейся задачи, а не только для мигания. Измените интервал и действие — и сможете планировать что угодно.
Быстрая проверка
Почему результат millis мы храним в типе unsigned long?
Итоги
Вы изучили шаблон millis: запомнить последний момент, проверить прошедший интервал, выполнить действие и сбросить отсчёт. Теперь плата мигает и при этом полностью готова реагировать на события. 🎉
Изучай C++ с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Мигание без delay с использованием millis» бесплатный?
Да — полный текст урока «Мигание без delay с использованием millis» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Arduino & IoT Academy, подпишись на CoddyKit PRO. Курс Arduino & IoT Academy содержит 4 уроков всего.
Чему я научусь в уроке «Мигание без delay с использованием millis»?
Отслеживайте прошедшее время и запускайте задачи по расписанию. Ты практикуешь Arduino & IoT Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Arduino & IoT Academy?
Предыдущий опыт не требуется. Arduino & IoT Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Мигание без delay с использованием millis»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Arduino & IoT Academy?
Да. Каждый урок Arduino & IoT Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- int, float, bool в Arduino
- Почему delay() блокирует всё
- Мигание без delay с использованием millis
- Запуск двух задач одновременно