|
对一个按键短按、长按检测程序:
#define BUTTON_PIN_1 7 // 定义一个按键Button pin1
#define DC_PIN 13 // LED pin
int get_key(void)
{ int k0,k1,tt=0;
AA1: k0=digitalRead(BUTTON_PIN_1); delay(30);
k1=digitalRead(BUTTON_PIN_1);
if(k1==LOW) goto AA1; //判断按键是否低电平,如果低,循环检测,如果高则下一句
AA2: tt++; //对按键高电平计数
k0=digitalRead(BUTTON_PIN_1); delay(10);
k1=digitalRead(BUTTON_PIN_1);
if(k1==HIGH) goto AA2; //判断按键是否高电平,如果高,继续计数,如果低电平,则表示按键结束
if(tt<30) return 11; //如果按键时间小于30*10ms=0.3s,则返回“11”,也可以自己任意定义返回值
if(tt>150) return 12; //如果按键时间大于150*10ms=1.5s,则返回“22”,也可以自己任意定义返回值,如果需要更长时间,修改系数150即可
}
void setup() {
pinMode(BUTTON_PIN_1,INPUT);
pinMode(DC_PIN,OUTPUT);
delay(100);
digitalWrite(DC_PIN,LOW);
}
//短按<300ms,LED亮;
//长按>1500ms, LED熄灭。
void caidan() /*菜单选择*/
{ int ch;
for(;;)
{ ch=get_key();
switch(ch)
{
case 11: /*短按LED亮 */
digitalWrite(DC_PIN,HIGH);
delay(10);
break;
case 12: /*长按LED灭 */
digitalWrite(DC_PIN,LOW);
delay(10);
break;
defult: break;
} /* End of switch */
} /* End for(;;) */
} /* End caidan() */
void loop()
{
while(1) {
caidan();
delay(10);
}//End while
}
|
|