March 17

Подробный разбор мигания светодиодом не используя delay()!

— Функции setup и loop 🌟

В каждой программе на 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 🔌

⚡ 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 ⏲

Функция millis() возвращает количество миллисекунд, прошедших с момента запуска программы на Arduino. Это очень полезно для измерения времени без использования задержек, которые могут блокировать выполнение кода.

Представьте, что вы готовите яйца-пашот. Вместо того чтобы смотреть на часы, вы используете секундомер. Каждый раз, когда на секундомере проходит 500 миллисекунд, вы переворачиваете яйцо. В нашем коде, если прошло более 500 миллисекунд с последней смены состояния светодиода:

if (millis() - timer > 500) {}

, мы переключаем его состояние:

digitalWrite(2, !digitalRead(2));

и обновляем таймер:

timer = millis();

Это позволяет создать эффект мигания без блокировки всей программы.