Arduino基礎入門篇15—隨機骰子

上一篇介紹了數碼管的使用,一位數碼管可顯示數字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)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章