为什么去掉delay()后就出错了?
两个arduino通过UART进行通信,A板连接开关,B板连接LED,当按一下开关时,LED灯亮,再按一下LED灯灭。下面是发射部分的程序:
int buttonpin =3;开关连接到D3
char flag; 定义一个控制开关亮灭的标志
boolean onoff=false;记录开关状态
void setup()
{
pinMode(buttonpin, INPUT); 设置D3为输入端口
Serial.begin(9600); 设置串口波特率为9600
}
void loop()
{
if( digitalRead(buttonpin)==LOW) 当开关按下时
{
delay(10);
if( digitalRead(buttonpin)==HIGH)松开开关时
{
delay(10);
onoff=(!onoff); onoff变成相反的状态
if (onoff==false) 如果onoff值为false,发送灭灯标志a
{
flag='a';
Serial.print(flag );
}
if(onoff==true) 如果onoff值为true,发送亮灯标志b
{
flag='b';
Serial.print(flag );
}
}
}
}
这里面的delay(10)作用是什么呢?为什么去掉程序中的delay(10)就出错了呢?求高手解答 当你按下键时,马上就去检测是否松开是行不通的,有一段小小的时间才会弹开,一般是10~30ms,这个delay是按键降噪用的。 楼上正解
按下,或松开时,机械开关的触点有最多30ms的不稳定忽通忽断阶段,通过延时跳过这段 matrixy 发表于 2012-9-24 12:13 static/image/common/back.gif
当你按下键时,马上就去检测是否松开是行不通的,有一段小小的时间才会弹开,一般是10~30ms,这个delay是按 ...
那如果我不用delay(),应该怎样修改程序呢? 不想被芯片独占空等10ms?
用定时器中断触发功能,定10ms后触发检测按键代码
或者按键加阻容做个硬件除抖,软件就不用任何延时检测了 test01 发表于 2012-9-24 13:31 static/image/common/back.gif
不想被芯片独占空等10ms?
用定时器中断触发功能,定10ms后触发检测按键代码
或者按键加阻容做个硬件除抖 ...
arduino中有定时器吗?已经用硬件消抖了,延时的作用应该不是消抖吧? 有定时器的,不过中断触发需要调用库函数
当在开关电路加了硬件消抖,那延时语句可以去掉了。木有硬件消抖,那就不能去 机械开关的触点有最多30ms的不稳定忽通忽断阶段。软件必须要加delay().除非是硬件加消抖功能。 延时的作用就是防抖~!
:) 如果没有延时的话你按一下开关,flag可以在a,b中变化 了N次,最后停留在那个值上就是未知的了~!:lol test01 发表于 2012-9-24 14:02 static/image/common/back.gif
有定时器的,不过中断触发需要调用库函数
当在开关电路加了硬件消抖,那延时语句可以去掉了。木有硬件消抖 ...
已经用了硬件消抖的,但是去掉延时还是有问题,请问一下定时器怎么样用 void loop()
{
if( digitalRead(buttonpin)==HIGH) 当开关按下时
{
delay(20);
if( digitalRead(buttonpin)==HIGH)松开开关时
{
delay(10);
onoff=(!onoff); onoff变成相反的状态
if (onoff==false) 如果onoff值为false,发送灭灯标志a
{ 羽衣甘蓝 发表于 2012-9-26 09:31 static/image/common/back.gif
已经用了硬件消抖的,但是去掉延时还是有问题,请问一下定时器怎么样用
修正硬件电路吧,说明没起作用,或作用不完全。能用硬件尽量硬件,除非节省成本才用软件消抖
http://www.geek-workshop.com/thread-1827-1-1.html这贴有定时器 求接受部分的程序。。。 求接受部分的程序和连线。。。
页:
[1]
2