基于上一节的知识,我们现在制作一个在现实中经常见到的抢答器。设计功能如下:当主持人按下开始按键后,三个人抢答开始,看谁先按下按键,最先按下按键的人相应的LED灯亮,主持人就可以根据灯的状态选择谁先回答问题。
电脑,windows系统
零知开发板
LED灯红色、绿色、黄色各一个
micro-usb线
按键4个
220Ω 电阻3个
10kΩ 电阻4个
面包板一个+若干跳线
1、打开零知实验室软件开发工具,然后新建项目,输入以下代码:
2、按照之前的方式先【编译】,然后【上传】到开发板中。
/**
* 文件: LED-qiangda.ino
* 作者: 零知实验室
* 时间: 2018/06/25 16:22
* 说明: 当主持人按下开始按键后,三个人抢答开始,看谁先按下按键,
* 最先按下按键的人相应的LED灯亮,主持人就可以根据灯的状态选择谁先回答问题。
**/
int LED_Y = 1; //三个颜色LED引脚连接
int LED_G = 2;
int LED_R = 3;
int KEY_START = 0; //开始按键连接0号引脚
int KEY_Y = 4; //三个按键连接4,5,6号引脚
int KEY_G = 5;
int KEY_R = 6;
int red = 0; //定义三个变量存放三个按键的电平状态
int green = 0;
int yellow = 0;
void clear_led();
void RED_YES();
void YELLOW_YES();
void GREEN_YES();
void setup() {
pinMode(LED_Y, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_R, OUTPUT);
//初始状态都关闭
digitalWrite(LED_R, HIGH);
digitalWrite(LED_G, HIGH);
digitalWrite(LED_Y, HIGH);
pinMode(KEY_Y, INPUT);
pinMode(KEY_G, INPUT);
pinMode(KEY_R, INPUT);
pinMode(KEY_START, INPUT);
}
void loop() {
red=digitalRead(KEY_R);//读取三个按键的电平状态并赋值给变量
yellow=digitalRead(KEY_Y);
green=digitalRead(KEY_G);
if(red==HIGH) //判断三个按键哪个先按下
RED_YES();
if(yellow==HIGH)
YELLOW_YES();
if(green==HIGH)
GREEN_YES();
}
void RED_YES()//一直执行红灯亮,直到复位键按下,结束循环
{
while(digitalRead(KEY_START)==0)
{
digitalWrite(LED_R,LOW);
digitalWrite(LED_G,HIGH);
digitalWrite(LED_Y,HIGH);
}
clear_led();
}
void YELLOW_YES()//一直执行黄灯亮,直到复位键按下,结束循环
{
while(digitalRead(KEY_START)==0)
{
digitalWrite(LED_R,HIGH);
digitalWrite(LED_G,HIGH);
digitalWrite(LED_Y,LOW);
}
clear_led();
}
void GREEN_YES()//一直执行绿灯亮,直到复位键按下,结束循环
{
while(digitalRead(KEY_START)==0)
{
digitalWrite(LED_R,HIGH);
digitalWrite(LED_G,LOW);
digitalWrite(LED_Y,HIGH);
}
clear_led();
}
void clear_led()//清除LED
{
digitalWrite(LED_R,HIGH);
digitalWrite(LED_G,HIGH);
digitalWrite(LED_Y,HIGH);
}
上面步骤成功完成后,我们就可以看到预期的结果了,如下: