level 4
SS闪S电SS
楼主

目的:按钮按一下LED灯亮,再按一下LED灯灭int k=LOW;//设置7号口的初始状态为低电平
void setup(){
pinMode(2,INPUT_PULLUP);
pinMode(7,OUTPUT);
}
void loop(){
int i;
i=digitalRead(2);
Serial.println(i);
if(i==0)//每次按下不松开,灯其实一直再闪
{
delay(20);
i = digitalRead(2);
if (i==0)
{
k = !k;
digitalWrite(7,k);
}
}
}
这样不能达到消抖目的的原因是不是 只消了按下开关的抖动,没有消掉松开开关的抖动?
这样按下按键不放的话,等会一直以20ms左右的周期闪烁,是不是因为loop函数里除了delay(20);外的程序基本上都是一瞬间完成的,而delay(20)是占程序每次执行的绝大部分时间,所以当松开开关的时候,很大的可能性都是在delay(20);中松开的,所以delay(20)之后的判断if(i==0);因为松开开关后没有消抖,所以2号引脚的状态可能的是1可能是0,不确定,所以不能达到目的?