穷创客教育之Arduino编程第九课:按键实验扩展
实验扩展:上面的例程做过以后,大家可能会想,这样的话我们想要点亮LED,手就不能离开按钮了,这样非常不方便,怎么才能像家里的开关控制电灯一样,按一下点亮,再按下熄灭呢?
电路图利用第八课右图,高电平有效。
法一:用一个变量记录LED灯是熄灭还是点亮状态,当按下按键时,若灯当前的状态是熄灭,则点亮灯同时改变灯的状态为点亮;当按下按键时,若灯当前的状态是点亮,则熄灭灯同时改变灯的状态为熄灭。
int state = 0; //存储LED状态的变量,0表示熄灭状态,1表示点亮状态。
void setup() {
pinMode(10,OUTPUT); //设置10号引脚为LED输出引脚
pinMode(2,INPUT); //设置2号引脚为开关输入引脚
}
void loop() {
if((digitalRead(2)== HIGH) && (state == 0))
{ //当按键按下且灯的状态为灭时灯变亮
state = 1; //灯的状态为亮
delay(100);//延迟10ms消除杂波干扰
digitalWrite(10,HIGH);
}else if((digitalRead(2)== HIGH) && (state == 1)){
//当按键按下且灯的状态为亮时,灯熄灭
state = 0;
delay(100);
digitalWrite(10,LOW);
}
}
法二:可用计数的方法,奇数为灭偶数为亮(用取余数操作符%。例如x=3%2即 x=1;x=4%2即x=0)
int js = 0; //计数变量。
void setup() {
pinMode(10,OUTPUT); //设置10号引脚为LED输出引脚
pinMode(2,INPUT); //设置2号引脚为开关输入引脚
}
void loop() {
if((digitalRead(2)== HIGH) && ((js%2)== 0)) {
//当按键按下且js为偶数时灯亮
js++; //js加1
delay(100);//延迟100ms消除杂波干扰
digitalWrite(10,HIGH);
}else if((digitalRead(2)== HIGH) && ((js%2) == 1)){
//当按键按下且灯的状态为亮时
js++;
delay(100);
digitalWrite(10,LOW);
}
}
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com