穷创客教育之Arduino编程第九课:按键实验扩展

网友投稿 2019-10-07 12:12

    实验扩展:上面的例程做过以后,大家可能会想,这样的话我们想要点亮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