1前言
事情是这样的,本来在准备公众号文章,想着用tinkercad模拟一下自己写的程序,结果无论自己如何调整程序,都无法达到预期的效果,后来经过层层排查发现是被一个按键整破防了。
这种四脚按键的四个引脚在按下之前是两两相通的原理图如下:
我在之前一直认为这种按钮的四个脚都是独立的,并且在按下后四个脚都会相通,经过查询资料发现原来自己认为的一直都是错的,这里把错误分享给大家,希望大家引以为戒(应该也不会有人像我一样傻吧)
2效果演示
所需材料:
连接电路图:
实现功能:
1、主持人按下按钮才能开始抢答,并且闪灯提示;
2、选手A抢答后选手B、C将无法进行抢答;
3、主持人再次点击按钮可以恢复抢答模式,并闪灯提示;
3主程序
//定义LED灯的引脚
const int greenLed = 10;
const int yellowLed = 9;
const int redLed = 8;
//定义按键开关引脚
const int greenButton = 2;
const int yellowButton = 3;
const int redButton = 4;
const int startButton = 5;
int r=1,y=1,b=1,s=1; //定义三个变量存储三个按键开关的状态
bool ready = false; //定义一个变量用于记录抢答器是否就绪的状态
void setup() {
// put your setup code here, to run once:
// 定义引脚输入输出状态
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(redButton, INPUT);
pinMode(yellowButton, INPUT);
pinMode(greenLed, INPUT);
pinMode(startButton, INPUT);
//将LED灯的初始化状态设定为熄灭
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
// 读取四个按键开关的状态
r = digitalRead(redButton);
y = digitalRead(yellowButton);
b = digitalRead(greenButton);
s = digitalRead(startButton);
if(s==0){ //如果主持人按下开始抢答按钮,选手前面的LED闪烁3次
for(int i=0;i<3;i++){
digitalWrite(redLed, HIGH);
digitalWrite(yellowLed, HIGH);
digitalWrite(greenLed, HIGH);
delay(500);
digitalWrite(redLed, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(greenLed, LOW);
delay(500);
}
ready = true;
}
//当抢答器处于就绪状态时
//红色按键按下
if(ready && r==0){
digitalWrite(redLed, HIGH);
ready = false;
}
//黄色按键按下
if(ready && y==0){
digitalWrite(yellowLed, HIGH);
ready = false;
}
//蓝色按键按下
if(ready && b==0){
digitalWrite(greenLed, HIGH);
ready = false;
}
}
4效果演示
,时长00:41
[ ]
5代码分析
在实现抢答环节中主要用到了if函数,但是有一个参数至关重要,ready
的状态直接决定了能否进入if循环,所以使用ready = false;
实现各个按键的互锁。
判断条件ready && y==0
用来判断是否已经准备就绪,并且其他人还未成功抢到,只有这两种情况同时满足才能进入if
,并将ready
的状态改为false
,防止进入其他if
。
另外有的朋友可能会说if
放置的先后顺序会影响结果,其实代码的运行速度是非常快的,并不会出现像大家想想的那种情况,所以在一定程度上还是公平的。
-
抢答器
+关注
关注
16文章
243浏览量
34459 -
按钮
+关注
关注
0文章
134浏览量
12767 -
Arduino
+关注
关注
188文章
6468浏览量
186906
发布评论请先 登录
相关推荐
评论