美文网首页玩转树莓派我用 Linux玩转Arduino
Arduino基础入门篇15—随机骰子

Arduino基础入门篇15—随机骰子

作者: TonyCode | 来源:发表于2018-09-05 08:19 被阅读3次

    上一篇介绍了数码管的使用,一位数码管可显示数字0到9。本篇使用random()函数产生随机数并在数码管上进行显示,制作一个随机骰子。

    在Arduino中,random()函数用来产生伪随机数,可以传入一个区间,产生此区间内的随机数。通常情况下,在使用random()函数之前,需要使用randomSeed()来初始化随机数生成器,指定一个随机数种子。

    1. 实验材料

    • Uno R3开发板
    • 配套USB数据线
    • 面包板及配套连接线
    • 共阴极数码管
    • 1个220Ω限流电阻

    2. 实验步骤

    1. 根据原理图搭建电路。

    数码管的A,B,C,D,E,F,G,DP引脚分别接入开发板的数字管脚7,6,5,10,11,8,9,4。数码管公共端接限流电阻,电阻另一端接GND。

    实验原理图如下图所示:

    实验原理图

    实物连接图如下图所示:

    实物连接图

    2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

    /*
       Random
       通过Random随机显示0到9的数字
    */
    
    //设置控制各段的数字IO脚,具体几号引脚对应哪一段,来源为数码管官方引脚图。
    int pin_a = 7;
    int pin_b = 6;
    int pin_c = 5;
    int pin_d = 10;
    int pin_e = 11;
    int pin_f = 8;
    int pin_g = 9;
    int pin_p = 4;
    
    int num;
    
    //根据共阴极数码管段码表定义0~9显示的各段开关状态
    int numTable[10][8] = {
      //1为点亮,0为关闭
      //a  b  c  d  e  f  g  dp
      {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()
    {
      for (int i = 4; i <= 11; i++)
      {
        pinMode(i, OUTPUT); //设置4~11引脚为输出模式
      }
    
      randomSeed(analogRead(0));
    }
    
    //根据索引显示数字
    void showNum(int index)
    {
      digitalWrite(pin_a, numTable[index][0]); //设置a 引脚的电平
      digitalWrite(pin_b, numTable[index][1]); //设置b 引脚的电平
      digitalWrite(pin_c, numTable[index][2]); //设置c 引脚的电平
      digitalWrite(pin_d, numTable[index][3]); //设置d 引脚的电平
      digitalWrite(pin_e, numTable[index][4]); //设置e 引脚的电平
      digitalWrite(pin_f, numTable[index][5]); //设置f 引脚的电平
      digitalWrite(pin_g, numTable[index][6]); //设置g 引脚的电平
      digitalWrite(pin_p, numTable[index][7]); //设置dp引脚的电平
    
    }
    
    void loop()
    {
      num = random(10); //产生随机数
      showNum(num); //显示随机数
      delay(500);
    }
    

    3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

    程序下载

    3. 实验现象

    随机显示0到9之间的数字。

    实验现象

    4. 函数介绍

    random()

    • 描述:生成伪随机数。
    • 函数原型:
      • random(max)
      • random(min,max)
    • 参数:
      • min: 随机数区间下限值,且包括在内。此参数可选,省略则从0开始。
      • max: 随机数区间上限值,且不包括在内。
    • 返回值:min和max-1之间的随机数。

    randomSeed()

    • 描述:初始化随机数生成器。
    • 函数原型:randomSeed(seed)
    • 参数:用于初始化伪随机序列的数字,随机数种子。
    • 返回值:没有。

    5. 实验分析

    程序中通过randomSeed()函数来初始化随机数生成器。当模拟管脚0悬空时,使用analogRead(0)读取到的是不确定的模拟噪声,用它来做随机种子,可获取到更加理想的随机数。在使用random()函数时,参数中区间上限是不包括在内的。比如想生成[10,20]之间的随机数,则应该这样写:random(10,21)。

    相关文章

      网友评论

        本文标题:Arduino基础入门篇15—随机骰子

        本文链接:https://www.haomeiwen.com/subject/qxpowftx.html