Arduino 电子积木基础套装 源代码有错误

2013-02-171.4万
AI 快速预览详细 收起
本文讨论了Arduino电子积木基础套装中抢答器源代码的一个常见问题:按键抖动。在按键扫描子程序中,由于使用了delay函数,导致key_1的值没有被重新读取,从而无法有效消除抖动。文章详细解析了问题原因,并提供了解决方案:在delay函数后重新读取key_1的值。这一修改可以确保按键状态的准确判断,使抢答器能够正常工作。
在抢答器的源码里:
void key_scan()//按键扫描子程序
{
int key_1,key_2,key_3;//定义发量
key_1=analogRead(2);//读叏模拟第一引脚癿电压值
key_2=analogRead(3);//读叏模拟第二引脚癿电压值
key_3=analogRead(4);//读叏模拟第三引脚癿电压值
if(key_1<204&&key_2<204&&key_3<204)//如果各按键电压值都小于204(即模拟值癿1V),可以判断没有按键按下
{ return;//跳出本子凼数
}
if(key_1>818)//如果按键1癿电压值都大于818(即模拟值癿4V),则可以判断按键1被按下
{
    delay(10);//由于有抖动,所以延时100ms再一次判断
    if(key_1>818)//如果按键1癿电压值都大于818(即模拟值癿4V),则可以判

问题在这里,由于delay函数是让程序停留在此处,此时并没有再一次去读key_1的值,如果因为抖动引起key_1值大于818,加了这个delay并没有改变key_1的值呀

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
Mickey
Mickey
这个延时是处理按键读取的一个常用手法,按钮按下时会由于接触时电平产生毛刺,这个延时就用来消除毛刺。
ni_jj
ni_jj
作者
if(key_1>818)//如果按键1癿电压值都大于818(即模拟值癿4V),则可以判断按键1被按下
{
delay(10);//由于有抖动,所以延时100ms再一次判断
key_1=analogRead(2);
if(key_1>818)//如果按键1癿电压值都大于818(即模拟值癿4V),则可以判
在delay后再加上一句读取key_1,应该是正解是吧。
R2D2
R2D2
非常感谢指出错误。 :lol:lol:lol
- 没有更多了 -