-2

我正在制作一个带有三个用于汽车的 LED 和两个用于行人的 LED 的交互式交通灯。这些行人有一个按钮,以便他们可以请求绿灯。标准设置始终是汽车的绿灯(10 秒)和行人的红灯(5 秒)。现在我的代码只允许行人在汽车开绿灯 10 秒后使用按钮并获得绿灯。

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

我的代码:

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

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

1 回答 1

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;
        }
    }
}
于 2019-03-02T11:54:22.717 回答