我如何存储按下的按钮,然后等到“ millis()-changeTime> = 10000”,然后调用函数changeLights()?

时间:2019-03-02 11:11:00

标签: arduino arduino-c++

我正在制作一个交互式交通信号灯,其中包括三个用于汽车的LED和两个用于行人的LED。这些行人有一个按钮,因此他们可以请求绿灯。标准设置始终是:汽车绿灯(10秒)和行人红灯(5秒)。现在,我的代码仅允许行人使用按钮并在汽车绿灯亮10秒钟后亮绿灯。

我的问题是如何存储在10秒钟内按下按钮,并在10秒钟用完后调用我的函数changeLights(),而无需等待。

我的代码:

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

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

1 个答案:

答案 0 :(得分:0)

您将需要几个变量:一个变量来跟踪行人是否按下按钮(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;
        }
    }
}