Подробный разбор мигания светодиодом не используя delay()!
В каждой программе на Arduino вы найдете две основные функции: setup() и loop(). Они являются сердцем любой скетч-программы на Arduino.
🔎 setup(): Эта функция запускается один раз при старте программы. Используйте ее для инициализации настроек, например, для установки режимов работы пинов. 🛠
🔎 loop(): После setup() Arduino переходит к функции loop(), которая повторяется бесконечно до отключения питания. Здесь происходит основная работа вашей программы. ♾
Обе функции ограничены фигурными скобками {}, которые определяют начало и конец блока кода для каждой функции.
📐 Типы данных и выбор uint32_t 📐
В мире Arduino, как и во вселенной, существует множество разных типов данных для хранения информации. Но почему же для таймера мы выбрали uint32_t?
uint32_t — это тип для хранения больших чисел (до 4 миллиардов+), идеален для отслеживания времени в миллисекундах без опасности быстро заполнить всё пространство.
Рассмотрим других жителей этой переменной Вселенной:
int — хранит целые числа, но гораздо меньше, чем uint32_t. Идеален для счета до ±32,767, кроме того он может хранить отрицательные значения.
byte — маленький и ловкий, хранит числа от 0 до 255. Подходит для управления цветом светодиода или других небольших данных.
float — для чисел с дробной частью. Когда нужно точность, например, в температуре или скорости.
⚡ pinMode(pin, mode) используется для установки режима работы пина на Arduino. pin — это номер пина, а mode может быть INPUT, OUTPUT, или INPUT_PULLUP. Например,
⚡ pinMode(2, OUTPUT); настраивает пин 2 как выходной, чтобы мы могли управлять подключенным к нему устройством (например, светодиодом).
— Команды digitalRead и digitalWrite 💡
digitalRead(pin) считывает и возвращает текущее состояние пина (1 или 0). Это используется, когда вам нужно проверить, включен ли светодиод или нет.
«!» перед digitalRead(pin) — это оператор НЕ. Он инвертирует значение: если digitalRead возвращает "1", оператор «!» превратит его в "0", и наоборот. Это позволяет нам переключать свет с включенного на выключенный и обратно.
digitalWrite(pin, value) устанавливает выходное состояние пина pin в значение value (1 или 0). В нашем случае мы используем его для включения или выключения светодиода.
Функция millis() возвращает количество миллисекунд, прошедших с момента запуска программы на Arduino. Это очень полезно для измерения времени без использования задержек, которые могут блокировать выполнение кода.
Представьте, что вы готовите яйца-пашот. Вместо того чтобы смотреть на часы, вы используете секундомер. Каждый раз, когда на секундомере проходит 500 миллисекунд, вы переворачиваете яйцо. В нашем коде, если прошло более 500 миллисекунд с последней смены состояния светодиода:
if (millis() - timer > 500) {}
, мы переключаем его состояние:
digitalWrite(2, !digitalRead(2));
Это позволяет создать эффект мигания без блокировки всей программы.