我的项目是一个按钮控制的警报器,具有不同的 LED 转换。您可以更改每次按下的警笛声(例如警察或救护车警笛等)。我使用 10 个 LED 为每个警报器添加了 2 个不同的 LED 模式。我总共添加了 4 个警笛音。
代码解释
1. 由于我们使用按键来切换音调,我们必须消除按键去抖的问题,我通过软件实现使用布尔去抖功能消除了这个问题。
2. 条件if-else 用于在不同功能之间切换。这里one()和oneA()是具有两个不同 LED 转换的第一个音调,对于其他功能也是如此。每个功能的音调都与delay()适当使用的 LED 转换同步。
同步的工作原理
tone()使用 Arduino 上的内置计时器之一,并且该计时器独立于delay(). 或者换句话说,我们可以说,如果你想播放区域节拍,你应该检查延迟时间和持续时间之间的差异,tone()因为这两个功能是并行工作的。现在我所做的是将延迟分成更小的部分,以便与不同的 LED 组一起使用。
让我们以three()一个例子来理解它。
void three() { //This function produces the 3rd siren (AMBULANCE sound).tone(buzz,440,200);
delay(300);
for(int i=3;i<=6;i++)
digitalWrite(i,HIGH);
noTone(buzz);
tone(buzz,494,500);
delay(300);
for(int i=3;i<=6;i++)
{ digitalWrite(i,LOW);
digitalWrite(i+6,HIGH); }
noTone(buzz);
tone(buzz,523,300);
delay(200);
digitalWrite(7,HIGH);
delay(50);
digitalWrite(8,HIGH);
delay(50);
noTone(buzz);
}
最后tone()我将300ms的延迟分为200、50和50,这样7脚和8脚的LED在523hz音调结束时有闪烁效果,而音调在后台持续300ms(因为没有如上所述的延迟和音调持续时间之间的差异)。
本方案更多详细资料可在附件中下载查看
以上内容翻译自网络,原作者:coding_killer,如涉及侵权,可联系删除。