Как я могу сохранить нажатие кнопки push, затем подождать, пока "millis() - changeTime >= 10000", а затем вызвать функцию changeLights()?
Я делаю интерактивный светофор с тремя светодиодами для автомобилей и двумя светодиодами для пешеходов. У этих пешеходов есть кнопка, чтобы они могли запросить зеленый свет. Стандартная настройка всегда зеленого цвета для автомобилей (10 секунд) и красного цвета для пешеходов (5 секунд). Прямо сейчас мой код разрешает пешеходам только нажимать кнопку и получать зеленый свет ПОСЛЕ того, как у автомобилей загорелся зеленый свет в течение 10 секунд.
У меня вопрос, как я могу сохранить нажатие кнопки в течение 10 секунд и вызвать мою функцию? changeLights()
после этих 10 секунд без ожидания.
Мой код:
void loop() {
int buttonState = digitalRead(pushButton);
if (buttonState == HIGH && millis() - changeTime >=
10000){
changeLights();
}
}
1 ответ
Вам понадобится пара переменных: одна, чтобы отслеживать, нажал ли пешеход кнопку (pedestrianIsWaiting
), а другое время, когда пешеход нажал кнопку (changeTime
).
Каждый раз loop
функция вызвана, проверьте кнопку. Если кнопка нажата и пешеход уже не ждет, измените pedestrianIsWaiting
к истине, и запишите время в changeTime
переменная.
Затем, пока пешеход ждет, проверьте прошедшее время. Если прошло 10 секунд, вызовите функцию и измените pedestrianIsWaiting
обратно в ложь.
Код выглядит так:
bool pedestrianIsWaiting = false;
unsigned long changeTime;
void loop()
{
int buttonState = digitalRead(pushButton);
if (buttonState == HIGH && !pedestrianIsWaiting)
{
pedestrianIsWaiting = true;
changeTime = millis();
}
if (pedestrianIsWaiting)
{
unsigned long elapsedTime = millis() - changeTime;
if (elapsedTime >= 10000)
{
changeLights();
pedestrianIsWaiting = false;
}
}
}