Два дела сразу: millis() вместо delay()

Светодиоды мигают с разными периодами: delay() так не умеет — он останавливает всё.

Продвинутый уровень Arduino Uno C++
Схема подключения: Два дела сразу: millis() вместо delay()
Схема в симуляторе. Нажмите «Открыть в симуляторе», чтобы запустить её и поменять.

Что понадобится

Как подключить

ОткудаКуда
Arduino UnoD8→Резистор 11
Резистор 12→Светодиод 1A
Светодиод 1C→Arduino UnoGND
Arduino UnoD9→Резистор 21
Резистор 22→Светодиод 2A
Светодиод 2C→Arduino UnoGND

Скетч

// Красный мигает раз в 300 мс, зелёный — раз в 1100 мс.
// Никаких delay(): каждый светодиод помнит своё время переключения.
const int LED_RED = 8;
const int LED_GREEN = 9;

unsigned long tRed = 0;
unsigned long tGreen = 0;
bool red = false;
bool green = false;

void setup() {
  pinMode(LED_RED, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);
}

void loop() {
  unsigned long now = millis();

  if (now - tRed >= 300) {
    tRed = now;
    red = !red;
    digitalWrite(LED_RED, red ? HIGH : LOW);
  }

  if (now - tGreen >= 1100) {
    tGreen = now;
    green = !green;
    digitalWrite(LED_GREEN, green ? HIGH : LOW);
  }
}

Коротко о детали: Arduino Uno

Плата на микроконтроллере ATmega328P: 14 цифровых выводов, 6 аналоговых входов, тактовая частота 16 МГц и логика 5 В. Скетч выполняется на ней: setup() один раз при старте, loop() — по кругу, пока есть питание. На выводе 13 распаян встроенный светодиод «L».

Распиновка и все примеры →

Ещё примеры с деталью «Arduino Uno»

Попробуйте сами

Симулятор работает прямо в браузере: схему можно менять, код — править, а результат видно сразу. Бесплатно, без установки и регистрации.

Открыть «Два дела сразу: millis() вместо delay()» в симуляторе