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放置的先后顺序会影响结果,其实代码的运行速度是非常快的,并不会出现像大家想想的那种情况,所以在一定程度上还是公平的。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
抢答器
+关注
关注
17文章
243浏览量
35696 -
按钮
+关注
关注
0文章
134浏览量
13492 -
Arduino
+关注
关注
190文章
6527浏览量
197431
发布评论请先 登录
相关推荐
热点推荐
基于STM32的无线抢答器
无线抢答器采用STM32F103ZET6(STM 32F103ZET6数据手册)芯片主控,同时用蓝牙模块HC-05,语音模块ISD1760(ISD1760数据手册),数码管,七彩灯等部件构成,当
发表于 08-29 14:13
FPGA抢答器该怎么设计?
主要有两种:小规模数字逻辑芯片译码器和触发器来做,另外一种用单片机来做;小规模数字逻辑电路比较复杂,用单片机来做随着抢答组数的增加有时候存在
发表于 09-24 08:24
基于STM32的抢答器设计
前言最近在指导一个小学弟完成他的设计,借此机会记录一个小项目从“系统结构设计、器件选型、PC板绘制、程序调试”的过程。目的:设计一个四人的抢答器设计要求:1、抢答器可同时供四组抢答;2、抢答器
发表于 07-26 06:14
多路智力竞赛抢答器设计
掌握抢答器的工作原理及其设计方法。重点:定时抢答器的总体框图的产生。难点:抢答器控制电路的设计。一、抢答器的功能要求·基本功能① 设计一个智力竞赛
发表于 12-01 17:34
•624次下载
PLC抢答器设计
本文介绍的PLC抢答器,思路清晰,程序设计易于理解,能准确、快速做出判断,具有很强的实用性。PLC抢答器设计保证了竞赛活动的合理、公平、公正进行。
发表于 12-24 00:30
•2.1w次阅读
8路数字抢答器课程设计报告
抢答器作为一种工具,已经广泛应用于各种智力和知识竞赛场合。本设计以八路智力竞赛抢答器为基本概念,从实际应用出发,利用电子设计自动化( EDA)技术,用数字、模拟电子器件设计具有扩充功能的抢答器
发表于 11-15 17:39
•47次下载
用Arduino写个抢答器
评论