1. 抢答器简介
抢答器是通过设计电路,以实现如字面上意思的能准确判断出抢答者的电器。在知识竞赛、文体娱乐活动(抢答赛活动)中,能准确、公正、直观地判断出抢答者的座位号。更好的促进各个团体的竞争意识,让选手门体验到战场般的压力感。
很多人制作的抢答器只是大概判断出抢答的选手,如果遇到选手之间几乎同时抢答的情况,则无法判断先后。会使得准确性、公平性大打折扣。
完成本实验要用到的元件如下:灯的实验扩展成3 个按键对应3 个小灯,占用6 个数字I/O 接口。
2. 硬件准备
元件名称数量
按键开关3
LED3
220Ω电阻3
1kΩ电阻3
3. 设计原理
按键没有按下时,按键对应的引脚处于悬空状态,此时电平悬空。采用下拉电阻的方式让按键未被按下时的电平处于低电平。当按下按键时,电阻处于高电平,选手所对应的灯亮起,蜂鸣器发声。同时向串口发送所在位置的信息。判断选手按下按键的先后。
4. 代码和仿真结果
int beep=2; int ledA=8; int ledB=9; int ledC=10; int buttonA=3; int buttonB=4;
int buttonC=5; void setup(){ Serial.begin(9600); pinMode(beep,OUTPUT);
pinMode(ledA,OUTPUT); pinMode(ledB,OUTPUT); pinMode(ledC,OUTPUT);
//设置电阻为上拉模式,当电平嵌入在高电平 pinMode(buttonA,INPUT_PULLUP);
pinMode(buttonB,INPUT_PULLUP); pinMode(buttonC,INPUT_PULLUP); } void loop(){
if(digitalRead(buttonA)==0){ //判断开关A的状态是为低电平 digitalWrite(ledA,HIGH);
//digitalWrite(beep,HIGH); tone(beep,700,10); //使用频率为700的波驱动蜂鸣器,持续发生10微秒
//delay(1); Serial.println("A"); } else{ digitalWrite(beep,LOW); delay(1); }
if(digitalRead(buttonB)==0){ //判断开关B的状态是为低电平 digitalWrite(ledB,HIGH);
//digitalWrite(beep,HIGH); tone(beep,700,10); //delay(1); Serial.println("B");
} else{ digitalWrite(beep,LOW); delay(1); } if(digitalRead(buttonC)==0){
//判断开关C的状态是为低电平 digitalWrite(ledC,HIGH); //digitalWrite(beep,HIGH);
tone(beep,700,10); //delay(1); Serial.println("C"); } else{
digitalWrite(beep,LOW); delay(1); } delay(20); digitalWrite(ledA,LOW);
digitalWrite(ledB,LOW); digitalWrite(ledC,LOW); } 图1 电路连线图