gpt4 book ai didi

c++ - 在 Arduino 中同时执行多项功能

转载 作者:行者123 更新时间:2023-11-30 03:03:56 24 4
gpt4 key购买 nike

我正在制作 Arduino 草图,我在其中创建了两个交通信号灯,一个用于正常交通,一个用于行人。我为这两个灯中的每一个都创建了一个函数,它循环它的循环(例如:变黄,等待 20 秒,然后变红并再次等待)。这些称为 aTrafficlight() 和 pTrafficlight,其中 a 是普通灯,p 是行人灯。在我的 loop() 函数中,我为一个按钮设置了一个 digitalRead。按下此按钮时,交通灯应一次一个地循环(因此正常灯变为红色,pTrafficlight 稍等片刻,然后变为绿色,闪烁几次,变为红色,等待并结束循环,因此它回到原来的状态。)

这一切都有效。但是现在我想添加一个蜂鸣器。当 pTrafficlight 为红色时,此蜂鸣器必须每秒发出一次蜂鸣声,当它为绿色时,每十分之一秒发出一次蜂鸣声,当它呈绿色闪烁时,每两秒发出两次。

这里我遇到了几个问题: - 在原始状态(未按下按钮)等待时,似乎有时我可以毫无 react 地按下按钮,因为循环仍在进行。我需要弄清楚当 buttonState == LOW 时如何避免在循环中等待。 (有一个函数 wait(int sec)) - 当按钮被按下时,它循环通过循环。我可以编写某种循环来实现红绿灯同时发出哔哔声,但我宁愿将它们分开。 - 双哔声相同。我不希望指示灯的哔哔声和闪烁出现在同一个 for 循环中,因为这样会使代码困惑且难以阅读和理解。

这是我的循环():

int buttonState = 0;

void loop(){
buttonState = digitalRead(pButton);

if(buttonState == LOW){
vSet("red");
pSet("green");

// This is where I tried to create the sound.
digitalWrite(pSound, HIGH);
delay(10);
digitalWrite(pSound, LOW);
wait(1);
} else {
aTrafficlight();
pTrafficlight();
}
}

有没有办法解决我的多线程问题?我试图在 arduino.cc 和谷歌上查找它,但找不到我理解得足以在现有代码中使用它的方法。

如果没有,您有什么更好的建议吗?

最佳答案

你不需要多线程。您需要使用计时器,无论是通过中断(如 Pawel 所写)还是通过其他机制(例如 Metro 库)让代码在计时器运行时继续循环。请参阅此问答:How Can I Create Interrupts in C for Arduino

巧合的是,我最近posted正如 Hans Passant 提到的,一些关于状态机和 Arduino 的 Material ,以及关于 delay() 的替代方法的一些 Material ,它们都带有您可能会觉得有用的其他引用资料。

关于c++ - 在 Arduino 中同时执行多项功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com