Избавляемся от циклов
Избавляемся от циклов и задержек
Как мигать светодиодом без задержки мы уже обсуждали. А как избавиться от цикла и сделать его асинхронным, чтобы он не блокировал выполнение? Очень просто - цикл заменяется на счётчик и условие. Пусть у нас есть цикл for
, выводящий значение счётчика:
for (int i = 0; i < 10; i++) { Serial.println(i); }
Для избавления от цикла нам нужно сделать свою глобальную переменную-счётчик, поместить всё это дело в loop()
и самостоятельно увеличивать переменную и проверять условие:
int counter = 0; void loop() { Serial.println(counter); counter++; if (counter >= 10) counter = 0; }
И всё. А как быть, если в цикле была задержка? Вот пример
for (int i = 0; i < 30; i++) { // например, зажигаем i-ый светодиод delay(100); }
Нужно избавиться и от цикла, и от delay()
. Введём таймер на millis()
, как в уроке про многозадачность, и будем работать по нему:
int counter = 0; // замена i uint32_t timer = 0; // переменная таймера #define T_PERIOD 100 // период переключения void loop() { if (millis() - timer >= T_PERIOD) { // таймер на millis() timer = millis(); // сброс // действие с counter - наш i-ый светодиод например counter++; // прибавляем счётчик if (counter > 30) counter = 0; // закольцовываем изменение } }
Вот собственно и всё! Вместо переменной цикла i
у нас теперь свой глобальный счётчик counter
, который бегает от 0 до 30 (в этом примере) с периодом 100 мс.
Видео
Полезные страницы
- Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
- Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
- Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
- Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
- Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
- Поддержать автора за работу над уроками
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])