方案介绍
我的项目是一个按钮控制的警报器,具有不同的 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(因为没有如上所述的延迟和音调持续时间之间的差异)。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !