【Arduino实验04 抢答器制作】

目录

一、设计任务

二、设计思路

三、设计原理

1.电路原理

2.编程原理

四、硬件设计

1、硬件设计概述

2、输入、输出电路说明,重要模块功能说明

3、电路图与电路功能说明

4、抢答器电路原理图

​五、软件设计

1、软件设计概述

2、程序功能(流程图):

3、源程序(块)代码

六、系统调试

七、实验总结


一、设计任务

        设计并制作实现一个3-5个代表队抢答的多路抢答器,具有多路抢答、结果信息显示、开始与清零控制功能。假定抢答代表队5个,给每队选手一个抢答按钮,对应按钮编号为1、2、3、4、5,给主持人设定一个抢答开始按钮、一个系统清零按钮。当主持人按下开始按钮,选手开始抢答,系统判定按下按钮最快的选手,即通过LED显示指示最快按下的按钮、蜂鸣器同时发声提示,并禁止其他选手抢答直至主持人清零。

二、设计思路

        系统采用标准化、模块化、开放式的Arduino UNO R3主板为开发平台,通过I/O口连接按键、LED灯、蜂鸣器构成电路系统,通过Arduino IDE编程实现多路抢答、控制信息实时显示的抢答器功能。设计方案如下:抢答器电路:Arduino UNO板指定编号的I/O接口连接2个控制按键,4个抢答按键,接口模式设置为INPUT,连接下拉电阻使按键初值为低电平,按下按键输入转为高电平;指定编号的I/O接口接5个LED灯和蜂鸣器,接口设置为OUTPUT模式,初始值为低电平,按键按下输出为高电平,点亮相应的LED灯、驱动蜂鸣器发声。抢答器程序控制:电路I/O接口功能与状态通过接口函数进行定义后,通过编写控制程序,以按键输入接口信号控制输出接口的电平状态,实现抢答结果信息的输出显示与发声提示。

三、设计原理

1.电路原理

        本次实验选用的Arduino UNO R3板,将触点式按键、LED灯、蜂鸣器通过主板I/O口连接。Arduino UNO R3是基于ATmega328P的微控制器板,有14个digital I/O引脚(其中6个可用作PWM输出),6个analog输入,16MHz晶振时钟,USB连接,POWER插孔,ICSP接头和复位按钮。通过USB数据线连接电脑进行供电、程序下载与TX\RX数据通讯。Arduino 电路系统根据需要接入I/O传感与执行电路模块,通过编程进行输入、输出电路信号控制,实现电路系统的功能,如下图所示:

2.编程原理

        编程环境:Arduino IDE使用函数及其功能:pinMode()、digitalRead()、digitalWrite()、tone()、noTone()控制语句及其功能:while、if....、for...、

四、硬件设计

1、硬件设计概述

        选用Arduino UNO R3开发板,将触点按键、LED灯、蜂鸣器模块与开发板I/O接口连接,组成多路抢答器电路。

2、输入、输出电路说明,重要模块功能说明

        输入部分:接入7个触点按键,2个作系统控制按键,5个作抢答按键。输出部分:接入5个LED显示抢中信息,接入1个蜂鸣器抢中后发声提示。

3、电路图与电路功能说明

4、抢答器电路原理图


五、软件设计

1、软件设计概述

         基于Arduino IDE编程环境,调用软件核心库函数定义输入、输出接口,编程实现按键输入、LED灯与蜂鸣器输出电路的控制,以实现多路抢答、显示的功能。

2、程序功能(流程图):

3、源程序(块)代码

int button1=3;
int button2=4;
int button3=5;
int red_1=6;
int red_2=7;
int red_3=8;
int be_button=9;
int cl_button=10;
int buzzerpin=11;
int red1;
int red2;
int red3;
int val=0;
int old_val=0;
int count;
void setup() {
    pinMode(button1,INPUT);
    pinMode(button2,INPUT);
    pinMode(button3,INPUT);
    pinMode(red_1,OUTPUT);
    pinMode(red_2,OUTPUT);
    pinMode(red_3,OUTPUT);
    pinMode(be_button,INPUT);
    pinMode(cl_button,INPUT);
    pinMode(buzzerpin,OUTPUT);
}
void loop() {
  if(digitalRead(be_button)==HIGH){
    buzeer();
    delay(40);
    count=0;
    }
  if(count==0){
  red1=digitalRead(button1);
  red2=digitalRead(button2);
  red3=digitalRead(button3);
  if(red1==HIGH){
    Red1();
    count+=1;
  }
  if(red2==HIGH){
    Red2();
    count+=1;
  }
  if(red3==HIGH){
    Red3();
    count+=1;
  }
      }
  if(digitalRead(cl_button)==HIGH){
    clear_led();
    }  

}
void Red1(){
 
  for(int i=0;i<10;i++){ 
    buzeer();
    digitalWrite(red_1,HIGH);
    delay(100);
    digitalWrite(red_1,LOW);
    delay(100);
  }
  digitalWrite(red_1,HIGH);
  digitalWrite(red_2,LOW);
  digitalWrite(red_3,LOW);
    
}
void Red2(){
  for(int i=0;i<10;i++){ 
    buzeer();
    digitalWrite(red_2,HIGH);
    delay(100);
    digitalWrite(red_2,LOW);
    delay(100);
  }
  digitalWrite(red_1,LOW);
  digitalWrite(red_2,HIGH);
  digitalWrite(red_3,LOW);
}
void Red3(){
  for(int i=0;i<10;i++){ 
    buzeer();
    digitalWrite(red_3,HIGH);
    delay(100);
    digitalWrite(red_3,LOW);
    delay(100);
  }
    digitalWrite(red_1,LOW);
    digitalWrite(red_2,LOW);
    digitalWrite(red_3,HIGH);
  }
void clear_led(){
    digitalWrite(red_1,LOW);
    digitalWrite(red_2,LOW);
    digitalWrite(red_3,LOW);
    
    }
void buzeer(){
    
    tone(buzzerpin,400);
    delay(100);
    noTone(buzzerpin);
    }

六、系统调试

        程序测试正常,可以形成简单的抢答器。

七、实验总结

        首先,通过本此实验我更加熟练地使用Arduino IDE软件,以及通过Arduino IDE软件来编译代码控制Arduino微控制板,编译所需要的源代码控制微控制板。其次,在本次实验中,当主持人按下开始按钮,选手开始抢答,系统判定按下按钮最快的选手,即通过LED显示指示最快按下的按钮、蜂鸣器同时发声提示,并禁止其他选手抢答直至主持人清零。最后,希望下次继续努力学习,再接再厉。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小花-Soleil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值