ardiuno考试

本文介绍了使用Arduino实现的多种抢答器和光敏传感器的应用。包括两个按键的简单抢答器,带有公共键的抢答器,以及数码管显示的抢答器。同时,还涵盖了光敏传感器控制LED灯亮度、数码管显示以及呼吸灯效果的实现。此外,文章还探讨了如何根据光线强度调整数码管显示和蜂鸣器的工作状态。
摘要由CSDN通过智能技术生成

按键

题目:
1、两个按键实现一个抢答器,哪个按键先按下,哪个按键对应的LED就亮,后按的键对应的LED不亮。

2、两个按键实现一个抢答器,哪个按键先按下,哪个按键对应的LED就亮,后按的键对应的LED不亮。第三个按键是公共键,按下后所有的LED等不亮。

3、两个按键编号1和2,实现一个抢答器,1号按键先按下,数码管就显示1,2号按键先按下,数码管就显示2,数码管初始状态为0。公共按键按下后数码管恢复初始状态0。(这个题可以把按键增加到3个、4个、5个等)。
答案:
int a0 = 0;
int a1 = 0;
int a2 = 0;
int se = 0;
int LED1 = 11;
int LED2 = 12;
int setPins[] = {7, 6, 4, 2, 3, 9, 10, 5};  //端口设置
byte digits[10][8] = {

// a, b, c, d, e, f, g,h.

  {1, 1, 1, 1, 1, 1, 0, 0},  // 0

  {0, 1, 1, 0, 0, 0, 0, 0},  // 1

  {1, 1, 0, 1, 1, 0, 1, 0},  // 2

  {1, 1, 1, 1, 0, 0, 1, 0},  // 3

  {0, 1, 1, 0, 0, 1, 1, 0},  // 4

  {1, 0, 1, 1, 0, 1, 1, 0},  // 5

  {1, 0, 1, 1, 1, 1, 1, 0},  // 6

  {1, 1, 1, 0, 0, 0, 0, 0},  // 7

  {1, 1, 1, 1, 1, 1, 1, 0},  // 8  

  {1, 1, 1, 1, 0, 1, 1, 0}   // 9  

}; 
void setup() {
  Serial.begin(9600);
  for(int i = 0; i<= 13;i++){
    pinMode(i,OUTPUT);
  }
}
void test01(){
  a0 = analogRead(0);
  a1 = analogRead(1);
  a2 = analogRead(2);
  if(a0 >= 521 &&se == 0){
    digitalWrite(LED1,1);
    digitalWrite(LED2,0);
    se = 1;
  }
  if(a1 >= 521 &&se == 0){
    digitalWrite(LED2,1);
    digitalWrite(LED1,0);
    se = 2;
  }
}
void num(int a){
  for(int i = 0; i< 8;i++){
    digitalWrite(setPins[i],digits[a][i]);
  }
}
void test02(){
  a0 = analogRead(0);
  a1 = analogRead(1);
  a2 = analogRead(2);
  if(a0 >= 521 &&se == 0){
    digitalWrite(LED1,1);
    digitalWrite(LED2,0);
    se = 1;
  }
  if(a1 >= 521 &&se == 0){
    digitalWrite(LED2,1);
    digitalWrite(LED1,0);
    se = 2;
  }
  if(a2 >= 521){
    digitalWrite(LED1,0);
    digitalWrite(LED2,0);
    se = 0;
  }
}
void test03(){
  a0 = analogRead(0);
  a1 = analogRead(1);
  a2 = analogRead(2);
  if(a0 >= 521 &&se == 0){
    se = 1;
  }
  if(a1 >= 521 &&se == 0){
    se = 2;
  }
  if(a2 >= 521){
    se = 0;
  }
  num(se);
}
void loop() {
  test01();

}

光敏

题目:
1,光敏传感器控制3个LED灯,在光敏传感器的三个强度下亮不同的LED灯。;
2、光敏传感器和数码管,光敏强度的三个状态数码管分别显示2、5、9。

3、光敏传感器和呼吸灯,光线越强呼吸灯的亮度越弱,光线越弱呼吸灯的强度越强。

4、随着光线强度的变化数码管以此从0、1...9显示。

5、光线强度控制蜂鸣器,光线强度大于某一个值时蜂鸣器报警。
代码:
int a0 = 0;
int a1 = 0;
int s = 0;
int LED1 = 11;
int LED2 = 12;
int LED3 = 13;
int Fe = 8;//蜂鸣器
int setPins[] = {7, 6, 4, 2, 3, 9, 10, 5};  //端口设置
byte digits[10][8] = {

// a, b, c, d, e, f, g,h.

  {1, 1, 1, 1, 1, 1, 0, 0},  // 0

  {0, 1, 1, 0, 0, 0, 0, 0},  // 1

  {1, 1, 0, 1, 1, 0, 1, 0},  // 2

  {1, 1, 1, 1, 0, 0, 1, 0},  // 3

  {0, 1, 1, 0, 0, 1, 1, 0},  // 4

  {1, 0, 1, 1, 0, 1, 1, 0},  // 5

  {1, 0, 1, 1, 1, 1, 1, 0},  // 6

  {1, 1, 1, 0, 0, 0, 0, 0},  // 7

  {1, 1, 1, 1, 1, 1, 1, 0},  // 8  

  {1, 1, 1, 1, 0, 1, 1, 0}   // 9  

};   
void setup() {
  Serial.begin(9600);
  for(int i = 0; i<= 13;i++){
    pinMode(i,OUTPUT);
  }
}
void num(int a){
  for(int i = 0; i< 8;i++){
    digitalWrite(setPins[i],digits[a][i]);
  }
}
void ti01(){
  a0 = analogRead(0);
  if(a0 <= 300){
    
    digitalWrite(LED1,1);
    digitalWrite(LED2,0);
    digitalWrite(LED3,0);
  }else if(a0 <= 700){
    
    digitalWrite(LED1,0);
    digitalWrite(LED2,1);
    digitalWrite(LED3,0);
  }else{
    
    digitalWrite(LED1,0);
    digitalWrite(LED2,0);
    digitalWrite(LED3,1);
  }
}
void ti02(){
  a0 = analogRead(0);
 if(a0 <= 300){
    num(2);
  }else if(a0 <= 700){
    num(5);
  }else{
    num(9);
  }
}
void ti03(){
  a0 = analogRead(0);
  int n = (a0*255.0)/1023.0;
  Serial.println(n);
  analogWrite(LED1,n);  
}
void ti04(){
   a0 = analogRead(0);
  int l = a0/105;
  num(l);
}
void ti05(){
  a0 = analogRead(0);
  Serial.println(a0);
  if(a0 > 700){
    digitalWrite(Fe,1);
  }else{
    digitalWrite(Fe,1);
  }
}
void loop() {
 	

}

数码管

题目:
1. 1位数码管和3个LED灯,数码管显示2、5、8,每显示一个数字对应一个LED灯亮,时间间隔2秒。

2. 1位数码管和1个LED灯,LED的亮度可以调节,数码管依次显示1、5、9,数码管显示1时LED灯最暗,显示9时LED灯最亮,时间间隔2秒。

3. 3个红、黄、绿LED灯代表交通灯显示,先红灯亮,持续3秒,数码管显示3,每秒倒计时到0,然后绿灯亮,持续2秒,数码管显示2,每秒倒计时到0。然后黄灯闪三次,每次时间间隔1秒,数码管显示3,每秒倒计时到0。
答案
int LED1 = 11;
int LED2 = 12;
int LED3 = 13;
int setPins[] = {7, 6, 4, 2, 3, 9, 10, 5};  //端口设置
byte digits[10][8] = {
// a, b, c, d, e, f, g,h.

  {1, 1, 1, 1, 1, 1, 0, 0},  // 0

  {0, 1, 1, 0, 0, 0, 0, 0},  // 1

  {1, 1, 0, 1, 1, 0, 1, 0},  // 2

  {1, 1, 1, 1, 0, 0, 1, 0},  // 3

  {0, 1, 1, 0, 0, 1, 1, 0},  // 4

  {1, 0, 1, 1, 0, 1, 1, 0},  // 5

  {1, 0, 1, 1, 1, 1, 1, 0},  // 6

  {1, 1, 1, 0, 0, 0, 0, 0},  // 7

  {1, 1, 1, 1, 1, 1, 1, 0},  // 8  

  {1, 1, 1, 1, 0, 1, 1, 0}   // 9  

};  
void setup() {
  Serial.begin(9600);
  for(int i = 0; i<= 13;i++){
    pinMode(i,OUTPUT);
  }
}
void num(int a){
  for(int i = 0; i< 8;i++){
    digitalWrite(setPins[i],digits[a][i]);
  }
}
void test01(){
  num(2);
  digitalWrite(LED1,1);
  delay(2000);
  digitalWrite(LED1,0);
  num(5);
  digitalWrite(LED2,1);
  delay(2000);
  digitalWrite(LED2,0);
  num(8);
  digitalWrite(LED3,1);
  delay(2000);
  digitalWrite(LED3,0);
}
void test02(){
  num(1);
  analogWrite(11,10);
  delay(2000);
  num(5);
  analogWrite(11,100);
  delay(2000);
  num(9);
  analogWrite(11,255);
  delay(2000);
}
void test03(){
  for(int i = 3; i > 0; i--){
    digitalWrite(LED3,1);
    num(i);
    delay(1000);
  }
  digitalWrite(LED3,0);
  for(int i = 2; i > 0; i--){
    digitalWrite(LED1,1);
    num(i);
    delay(1000);
  }
  digitalWrite(LED1,0);
  for(int i = 3; i > 0; i--){
    digitalWrite(LED2,1);
    num(i);
    delay(500);
    digitalWrite(LED2,0);
    delay(500);
  }
}
void loop(){

}

电位器

题目:
1. 电位器模拟电压表
2. 电位器控制LED的亮度
3. 电位器控制LED的闪烁频率
代码:
int a0 = 0;
void setup() {
  Serial.begin(9600);
  pinMode(11,OUTPUT);
}
//模拟电压表
void test01(){
  a0 = analogRead(0);
  double val = (a0*5.0)/1023.0;
  Serial.println(val);
  delay(1000);
}
//电位器控制LED的亮度
void test02(){
  a0 = analogRead(0);
  int l = (a0*255.0)/1023.0;
  analogWrite(11,l);
}
//电位器控制LED的闪烁频率
void test03(){
  a0 = analogRead(0);
  digitalWrite(11,1);
  delay(a0/2.0+50);
  digitalWrite(11,0);
  delay(a0/2.0+50);
}
void loop() {
  test03();
}

LED灯

题目:
1.依次亮灯、在依次关灯
2.依次亮灯和关灯
3.全亮和全灭 
代码:
void setup() {
  for(int i = 2;i <= 5; i++){
    pinMode(i,OUTPUT);
  }

}
void test01(){
  for(int i = 2;i <= 5; i++){
    digitalWrite(i,1);
    delay(1000);
  }
  for(int i = 2;i <= 5; i++){
    digitalWrite(i,0);
    delay(1000);
  }
}
void test02(){
  for(int i = 2;i <= 5; i++){
    digitalWrite(i,1);
    delay(1000);
  }
  for(int i = 2;i <= 5; i++){
    digitalWrite(i,0);
  }
  delay(1000);
}
void test03(){
  for(int i = 2;i <= 5; i++){
    digitalWrite(i,1);
  }
  delay(1000);
  for(int i = 2;i <= 5; i++){
    digitalWrite(i,0);
  }
  delay(1000);
}
void loop() {
  test03();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值