0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用Arduino写个抢答器

汽车电子技术 来源:嵌入式悦翔园 作者:李斌 2023-02-17 11:25 次阅读

1前言

事情是这样的,本来在准备公众号文章,想着用tinkercad模拟一下自己写的程序,结果无论自己如何调整程序,都无法达到预期的效果,后来经过层层排查发现是被一个按键整破防了。

图片

这种四脚按键的四个引脚在按下之前是两两相通的原理图如下:

图片

我在之前一直认为这种按钮的四个脚都是独立的,并且在按下后四个脚都会相通,经过查询资料发现原来自己认为的一直都是错的,这里把错误分享给大家,希望大家引以为戒(应该也不会有人像我一样傻吧)

2效果演示

所需材料:

  • Arduinio uno开发板一个
  • 按键四个
  • LED灯三个
  • 电阻七个
  • 杜邦线若干

连接电路图:图片

实现功能:

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
收藏 人收藏

    评论

    相关推荐

    基于数字电路的多路抢答器设计

    本文介绍一种数字电路组成的显示优先抢答号码的多路抢答器的设计与制作。
    发表于 03-31 09:28 1.2w次阅读
    基于数字电路的多路<b class='flag-5'>抢答器</b>设计

    #电子制作 #Arduino 抢答器小实验

    抢答器Arduino
    电子技术那些事儿
    发布于 :2022年08月09日 21:25:55

    求c程序 基于12864的八路抢答器

    本人大二,做个基于12864的八路抢答器,c程序不怎么给力,不懂怎么写个好程序,求帮忙。。。。。
    发表于 05-17 22:55

    基于STM32的无线抢答器

    无线抢答器采用STM32F103ZET6(STM 32F103ZET6数据手册)芯片主控,同时蓝牙模块HC-05,语音模块ISD1760(ISD1760数据手册),数码管,七彩灯等部件构成,当
    发表于 08-29 14:13

    制作抢答器

    第四章 抢答器的制作(Arduino边做边学:从点亮Led到物联网)
    发表于 06-24 12:18

    FPGA抢答器该怎么设计?

    主要有两种:小规模数字逻辑芯片译码和触发来做,另外一种单片机来做;小规模数字逻辑电路比较复杂,单片机来做随着抢答组数的增加有时候存在
    发表于 09-24 08:24

    基于STM32的抢答器设计

    前言最近在指导一个小学弟完成他的设计,借此机会记录一个小项目从“系统结构设计、器件选型、PC板绘制、程序调试”的过程。目的:设计一个四人的抢答器设计要求:1、抢答器可同时供四组抢答;2、抢答器
    发表于 07-26 06:14

    多路智力竞赛抢答器设计

    掌握抢答器的工作原理及其设计方法。重点:定时抢答器的总体框图的产生。难点:抢答器控制电路的设计。一、抢答器的功能要求·基本功能① 设计一个智力竞赛
    发表于 12-01 17:34 624次下载
    多路智力竞赛<b class='flag-5'>抢答器</b>设计

    自制电子抢答器

    自制电子抢答器抢答器已被人们所熟知,在一些电子类的杂志中也经常介绍,许多电子抢答器都采用了逻辑电路进行设计,在本文
    发表于 11-21 10:55 1.4w次阅读

    PLC抢答器设计

    本文介绍的PLC抢答器,思路清晰,程序设计易于理解,能准确、快速做出判断,具有很强的实用性。PLC抢答器设计保证了竞赛活动的合理、公平、公正进行。
    发表于 12-24 00:30 1.9w次阅读
    PLC<b class='flag-5'>抢答器</b>设计

    抢答器

    抢答器 C51单片机源码,KEIL源文件,C语言编写
    发表于 06-20 16:36 44次下载

    抢答器protues仿真程序 51抢答器设计 抢答器程序prot

    抢答器protues仿真程序 51抢答器设计 抢答器程序protues仿真设计
    发表于 01-14 22:32 171次下载

    8路数字抢答器课程设计报告

    抢答器作为一种工具,已经广泛应用于各种智力和知识竞赛场合。本设计以八路智力竞赛抢答器为基本概念,从实际应用出发,利用电子设计自动化( EDA)技术,数字、模拟电子器件设计具有扩充功能的抢答器
    发表于 11-15 17:39 47次下载

    抢答器plc梯形图介绍(三路抢答器和四路抢答器

    本文为大家介绍一个三路抢答器和一个四路抢答器的PLC梯形图。
    发表于 01-31 15:35 8.3w次阅读
    <b class='flag-5'>抢答器</b>plc梯形图介绍(三路<b class='flag-5'>抢答器</b>和四路<b class='flag-5'>抢答器</b>)

    数显号码抢答器设计制作

    本文介绍一种数字电路组成的显示优先抢答号码的多路抢答器的设计与制作。
    的头像 发表于 02-09 10:01 4903次阅读
    数显号码<b class='flag-5'>抢答器</b>设计制作