Menu
CoddyTech

Свет по таймеру

Часть раздела Отсчёт времени без delay путешествия по Arduino на Coddy. Урок 6 из 18.

Лестничный свет включается, когда ты нажимаешь кнопку, и немного позже гаснет сам. Нажми ещё раз, пока он горит, и отсчёт времени начнётся заново.

Для этого нужны две вещи: момент последнего нажатия и состояние света — включён он или нет. Сохраняй момент в переменной unsigned long, когда кнопка нажата:

if (digitalRead(buttonPin) == LOW) {
  pressedAt = millis();     // начать (или начать заново) отсчёт времени
  lightOn = true;
  digitalWrite(ledPin, HIGH);
}

Затем на каждой итерации цикла проверяй, сколько времени прошло:

if (lightOn && millis() - pressedAt >= onTime) {
  lightOn = false;
  digitalWrite(ledPin, LOW);
}

Обе части никогда не ждут, поэтому нажатие будет замечено в любой момент, даже когда свет уже включён. Если после нажатия использовать delay(2000), второе нажатие во время ожидания будет пропущено.

challenge icon

Задание

Легко

Создай освещение для лестницы:

  • при нажатии сразу загорается LED на контакте 13
  • через 2 секунды после нажатия свет выключается сам
  • нажатие, пока свет включён, запускает отсчёт 2 секунд заново

Нажми Run, нажми кнопку несколько раз, затем Check.

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

const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000;   // как долго светодиод остаётся включённым

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  // когда кнопка нажата: включить светодиод и запомнить время

  // когда с того момента пройдёт onTime: выключить светодиод
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Отсчёт времени без delay

Потренируйтесь самостоятельно: Песочница Arduino