Arduino 学习笔记_3 案例:按下按钮生成一位随机数字,在数码管中显示

猜数字案例

有一位8段数码管,和一个按钮。每次按下按钮,随机生成一个0~9的数并在LED显示器上显示出来。

首先先可以参考下官网上的案例。这个案例是从0到9所有数字循环显示,里面用到了数码管对应引脚,while,switch case,自定义函数这些知识点。

/*
19 MC猜数字 - 1 电路搭建
太极创客
www.taichi-maker.com

此程序用于太极创客<<零基础入门学用Arduino教程>>中,博主搬运只为学习!!!请支持原作者。
MC猜数字电路测试使用。

2017-04-21
*/
void setup() {
  pinMode(2, INPUT_PULLUP);
  for (int i = 2; i <= 9; i++) {
    pinMode(i, OUTPUT);
  }

}

// the loop function runs over and over again forever
void loop() {
  int myNumber = 0;
  while(myNumber <= 9){
    displayNumber(myNumber);
    delay(500);
    displayClear();
    myNumber++;
    while(!digitalRead(2)){
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
    }
    delay(500);
  }
}
void displayClear(){
  // 清理显示内容
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW); 
  digitalWrite(6, LOW); 
  digitalWrite(7, LOW); 
  digitalWrite(8, LOW); 
  digitalWrite(9, LOW); 
}

void displayNumber(int number){
  switch(number){
    case 1:
      digitalWrite(4, HIGH);
      digitalWrite(7, HIGH); 
      break;   
    case 2:
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;   
    case 3:
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;   
    case 4:
      digitalWrite(4, HIGH); 
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      break;  
    case 5:
      digitalWrite(3, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;
    case 6:
      digitalWrite(3, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;    
    case 7:
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH); 
      digitalWrite(7, HIGH);  
      break;
    case 8:
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;
    case 9:
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH); 
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      break;
    case 0:
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(6, HIGH); 
      digitalWrite(7, HIGH); 
      digitalWrite(8, HIGH); 
      digitalWrite(9, HIGH); 
      break;
    default:
      digitalWrite(5, HIGH);    
    }
}

基本原理就是下面这张图:

a:3号引脚。

b:4号引脚。

c:7号引脚。

d:8号引脚。

e:9号引脚。

f:6号引脚。

g:5号引脚。

数码管引脚图及功能

数码管的8段(包括小数点)都共用一个阴极,就是3或8出口。阴极通过一个200~500的电阻接GND。

在这里插入图片描述

while,switch case,自定义函数都和c差不多,看上面的例子就能明白。

改成按下按钮随机生成数,我们只需要改成:

int myNumber=0;
void loop() {
	while(!digitalRead(2)){//不按下按钮
      displayClear();
      myNumber=random(0,10);
      displayNumber(myNumber);
    }
}

第一次按下按钮,就会进入while,清空当前显示的字段,生成随机数并且显示该字段。因为不按下按钮就一直不会进入循环,清空显示,所以一直显示。

如果想查看随机数,可以在setup()中设置 Serial.begin(9600),loop中利用Serial.print(), Serial.println()输出,注意Arduino中不能+号字符串拼接。

比较诡异的是random()是伪随机。每次程序重新启动,顺序都是一样的。用randomSeed()可以解决这个问题。

在setup()中加一句:

randomSeed(analogRead(A0)); //A0引脚防空,这样每次读到的都是不一样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

灰海宽松

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

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

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

打赏作者

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

抵扣说明:

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

余额充值