Как я могу сохранить нажатие кнопки, затем подождать, пока "millis () - changeTime> = 10000", а затем вызвать функцию changeLights ()? - PullRequest
0 голосов
/ 02 марта 2019

Я делаю интерактивный светофор с тремя светодиодами для автомобилей и двумя светодиодами для пешеходов.У этих пешеходов есть кнопка, чтобы они могли запросить зеленый свет.Стандартная настройка всегда зеленого цвета для автомобилей (10 секунд) и красного цвета для пешеходов (5 секунд).Прямо сейчас мой код разрешает пешеходам только нажимать кнопку и получать зеленый свет ПОСЛЕ того, как у автомобилей загорелся зеленый свет в течение 10 секунд.

Мой вопрос: как мне сохранить, что кнопка нажата в течение 10 секунд, и вызвать мою функцию changeLights() по истечении этих 10 секунд без ожидания.

Мой код:

void loop() {
    int buttonState = digitalRead(pushButton);

    if (buttonState == HIGH && millis() - changeTime >=
        10000){
        changeLights();
      }
    }

1 Ответ

0 голосов
/ 02 марта 2019

Вам понадобится пара переменных: одна для отслеживания того, нажал ли пешеход кнопку (pedestrianIsWaiting), а другая - время, когда пешеход нажал кнопку (changeTime).

Каждый раз, когда вызывается функция loop, проверяйте кнопку.Если кнопка нажата и пешеход уже не ждет, измените pedestrianIsWaiting на true и запишите время в переменную changeTime.

Затем, пока пешеход ждет, проверьте истекшее время,Если прошло 10 секунд, вызовите функцию и измените pedestrianIsWaiting обратно на false.

Код выглядит следующим образом:

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;
        }
    }
}
...