Arduino & IoT Academy · Урок

Мигание без delay с использованием millis

Отслеживайте прошедшее время и запускайте задачи по расписанию.

Урок 3 из 413 шагов

«Мигание без 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 — локальная установка не требуется.

Все уроки этого курса

  1. int, float, bool в Arduino
  2. Почему delay() блокирует всё
  3. Мигание без delay с использованием millis
  4. Запуск двух задач одновременно
← Назад к Arduino & IoT Academy