我正在制作一个交互式交通信号灯,其中包括三个用于汽车的LED和两个用于行人的LED。这些行人有一个按钮,因此他们可以请求绿灯。标准设置始终是:汽车绿灯(10秒)和行人红灯(5秒)。现在,我的代码仅允许行人使用按钮并在汽车绿灯亮10秒钟后亮绿灯。
我的问题是如何存储在10秒钟内按下按钮,并在10秒钟用完后调用我的函数changeLights()
,而无需等待。
我的代码:
void loop() {
int buttonState = digitalRead(pushButton);
if (buttonState == HIGH && millis() - changeTime >=
10000){
changeLights();
}
}
答案 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;
}
}
}