当前位置:首页 > 新闻资讯 > 人物观点 > 新闻
Arduino编程,从新手到达人系列(三)
  • 2018/11/30 9:51:01
  • 类型:原创
  • 来源:电脑报
  • 报纸编辑:电脑报
  • 作者:
【电脑报在线】Arduino编程,从新手到达人系列(三)

一、按键控制LED实验

I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止本章设计的小灯实验都还只是应用到Arduino I/O 口的输出功能,这个实验我们来尝试一下使用ArduinoI/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED 小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O 的作用。按键开关大家都应该比较了解,属于开关量(数字量)元件,按下时为闭合(导通)状态。完成本实验要

用到的元件如(图1):

按键开关*1

红色M5 直插LED*1

220Ω电阻*1

10KΩ电阻*1

面包板*1

面包板跳线*1

我们将按键接到数字7 接口,红色小灯接到数字11 接口(Arduino 控制器0-13 数字I/O 接口都可以用来接按键和小灯,但是尽量不选择0 1 接口,0 1 接口为接口功能复用,除I/O 口功能外也是串口通信接口,下载程序时属于与PC 机通信故应保持0 1 接口悬空,所以为避免插拔线的麻烦尽量不选用0 1 接口),按下面的原理图2连接好电路。

实物连接见(图3、图4):

 

下面开始编写程序,我们让按键按下时小灯亮起,根据前面的学习相信这个程序很容易就能编写出来,相对于前面几个实验这个实验的程序中多加了一条条件判断语句,这里我们使用if 语句,Arduino 的程序便写语句是基于C 语言的,所以C 的条件判断语句自然也适用于Arduino,像whileswich 等等。这里根据个人喜好我们习惯

于使用简单易于理解的if 语句给大家做演示例程。

   分析电路可知当按键按下时,数字7 接口可读出为高电平,这时我们使数字11 口输出高电平可使小灯亮起,程序中我们判断数字7 口是否为低电平,要为低电平使数字11 口输出也为低电平小灯不亮,原理同上。

参考源程序:

int ledpin=11;//定义数字11 接口

int inpin=7;//定义数字7 接口

int val;//定义变量val

void setup()

{

pinMode(ledpin,OUTPUT);//定义小灯接口为输出接口

pinMode(inpin,INPUT);//定义按键接口为输入接口

}

void loop()

{

val=digitalRead(inpin);//读取数字7 口电平值赋给val

if(val==LOW)//检测按键是否按下,按键按下时小灯亮起

{ digitalWrite(ledpin,LOW);}

else

{ digitalWrite(ledpin,HIGH);}

}

//////////////////////////////////////////////

实验结果及其现象:当按键按下时,LED亮,按键没有按下时,LED不亮。

下载完程序我们本次的小灯配合按键的实验就完成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的手机当按下任一按键时背光灯就会亮起,这就是典型应用了。你可以把LED当成继电器,就可以控制220v电灯!

 

二、抢答器设计实验

完成上面的实验以后相信已经有很多朋友可以独立完成这个实验了,本实验就是将上面的按键控制小灯的实验扩展成3 个按键对应3 个小灯,占用6 个数字I/O 接口,见电路连接图(图5)。

 

原理这里就不多说了同上面实验,附上参考原理图和实物连接图6。

参考源程序如下:

int redled=8;     //红色LED 输出

int yellowled=7;  //黄色LED输出

int greenled=6;   //绿色LED输出

int redpin=5;     //红色按键引脚

int yellowpin=4;  //黄色按键引脚

int greenpin=3;   //绿色按键引脚

int restpin=2;   //复位按键引脚定义

int red;

int yellow;

int green;

void setup()

{

pinMode(redled,OUTPUT);

pinMode(yellowled,OUTPUT);

pinMode(greenled,OUTPUT);

pinMode(redpin,INPUT);

pinMode(yellowpin,INPUT);

pinMode(greenpin,INPUT);

}

void loop()  //按键循环扫描。

{

red=digitalRead(redpin);

yellow=digitalRead(yellowpin);

green=digitalRead(greenpin);

if(red==LOW)RED_YES();   

if(yellow==LOW)YELLOW_YES();

if(green==LOW)GREEN_YES();

}

void RED_YES()//一直执行红灯亮,直到复位键按下,结束循环

{

  while(digitalRead(restpin)==1)

  {

   digitalWrite(redled,HIGH);

   digitalWrite(greenled,LOW);

   digitalWrite(yellowled,LOW);

  }

  clear_led();

}

void YELLOW_YES()//一直执行黄灯亮,直到复位键按下,结束循环

{

  while(digitalRead(restpin)==1)

  {

  digitalWrite(redled,LOW);

  digitalWrite(greenled,LOW);

  digitalWrite(yellowled,HIGH);

  }

  clear_led();

}

void GREEN_YES()//一直执行绿灯亮,直到复位键按下,结束循环

{

  while(digitalRead(restpin)==1)

  {

  digitalWrite(redled,LOW);

  digitalWrite(greenled,HIGH);

  digitalWrite(yellowled,LOW);

  }

  clear_led();

}

void clear_led()//清除LED

{

  digitalWrite(redled,LOW);

  digitalWrite(greenled,LOW);

  digitalWrite(yellowled,LOW);

}

实验现象都说了是抢答器,肯定是谁先按下,就亮谁的灯啦!

然后按下REST按键后,复位。

下载完程序,我们自己制作的简易抢答器就完成了。

本文出自2018-11-26出版的《电脑报》2018年第46期 A.新闻周刊
(网站编辑:pcw2013)


我来说两句(0人参与讨论)
发表给力评论!看新闻,说两句。
匿名 ctrl+enter快捷提交
读者活动
48小时点击排行
论坛热帖