1. 抢答器简介
抢答器是通过设计电路,以实现如字面上意思的能准确判断出抢答者的电器。在知识竞赛、文体娱乐活动(抢答赛活动)中,能准确、公正、直观地判断出抢答者的座位号。更好的促进各个团体的竞争意识,让选手门体验到战场般的压力感。
很多人制作的抢答器只是大概判断出抢答的选手,如果遇到选手之间几乎同时抢答的情况,则无法判断先后。会使得准确性、公平性大打折扣。
完成本实验要用到的元件如下:灯的实验扩展成3 个按键对应3 个小灯,占用6 个数字I/O 接口。
2. 硬件准备
元件名称 | 数量 |
按键开关 | 3 |
LED | 3 |
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);
}
![](https://i-blog.csdnimg.cn/blog_migrate/9a2d09f15a66235c8e3b8241ae573cae.png)