Мигаем двумя светодиодами с разной частотой на Arduino без delay()
Компоненты и материалы
- Arduino UNO — 1 шт.
- Светодиод 5 мм красный — 2 шт.
О проекте
Этот урок возник в ответ на частый вопрос: как заставить два светодиода мигать с разной частотой? Если один должен мигать каждые 1000 мс, а второй — каждые 500 мс, можно обойтись delay(), разбив задержку на части. Но как только интервалы становятся некратными (например, 300 мс и 1000 мс), подход с delay() ломается — код становится нечитаемым или вообще невозможным.
Решение: отказаться от delay(). В Arduino IDE уже есть пример BlinkWithoutDelay. Мы просто дублируем логику для второго светодиода с нужным интервалом.
Код
const int ledPin = LED_BUILTIN;
int ledState = LOW;
unsigned long previousMillis = 0;
const long interval = 1000;
const int ledPin2 = 12;
int ledState2 = LOW;
unsigned long previousMillis2 = 0;
const long interval2 = 300;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
ledState = (ledState == LOW) ? HIGH : LOW;
digitalWrite(ledPin, ledState);
}
if (currentMillis - previousMillis2 >= interval2) {
previousMillis2 = currentMillis;
ledState2 = (ledState2 == LOW) ? HIGH : LOW;
digitalWrite(ledPin2, ledState2);
}
}
Каждый светодиод имеет свои переменные состояния, время последнего переключения и интервал. В loop() мы просто проверяем, не прошло ли нужное время для каждого — и переключаем. Никаких блокирующих задержек.
Схема подключения
Второй светодиод подключён к пину 12 через токоограничивающий резистор (220–330 Ом). Первый — встроенный на плате (пин 13). Общий GND.
Производственный процесс
- Защита алюминия от коррозии: экспертные стратегии для долговечности
- Мастерство облачных вычислений с нуля: практическое руководство для начинающих
- Почему переход с C на C++ может усилить встроенную разработку
- Реально-временный мониторинг температуры и влажности через веб на Raspberry Pi 4
- Учебник для начинающих по IoT: стриминг данных температуры с Raspberry Pi
- Потоковая передача данных температуры с ppDAQC Pi-Plate в InitialState на headless Raspberry Pi
- Создание WiFi-робота на Raspberry Pi и Android-смартфоне
- Управление задержками в Verilog: техники таймингов и лучшие практики
- Происхождение концепции пиления: от древних инструментов к современным машинам
- Серый чугун: свойства, производство и автомобильное применение