2015.07.23 17:35

Intel Edison 開發板自製樂透選號機

ADVERTISEMENT

是一個知名的創客網站,網站上有許多人上傳自己的作品,並且也提供專案讓其他的愛好者下載。T客邦在取得授權後,也會挑選一些有趣專案介紹給大家。這次的「自製樂透選號機」出自「」,作者是。

這是一台簡單、有效的樂透選號機。
你可以玩樂透遊戲,與親朋好友同樂或者真的拿這幾個數字去買樂透。
每隔 250 毫秒,隨機產生 7 個數字,從 1 到 39 之間的整數。
產生的數字可以任意變更。
這些數字取自我們國家(芬蘭)的全國樂透。

行動裝置使用者:若要觀看影片,請按這裡

ADVERTISEMENT

步驟 1:組裝


組裝很簡單。

ADVERTISEMENT

除了 Intel Edison 開發板,還需要 Arduino 擴充板、LCD 螢幕,還有一個按鈕。

我用一塊 Shield 擴充板,連接按鈕以及 LCD。

我用的按鈕是一個簡單的觸控板,可以感測到觸摸的動作,而 LCD 螢幕則是 RGB 背光。

ADVERTISEMENT

按鈕連接到 Arduino 擴充板上的 D7,而 LCD 則連接到 I2C。

步驟 2:編碼


將開發板連接到 PC,開始編寫程式碼。

程式碼使用 EEPROM 儲存產生的數字,所以螢幕上不會出現抽中相同數字的情形。

ADVERTISEMENT

一開始,以 #include 含入各項元件與全域變數。

 

#include

#include #include "rgb_lcd.h"

const int numNumbers = 7; const int buttonPin = 7;

rgb_lcd lcd;

const int colorR = 255; const int colorG = 0; const int colorB = 0;

int numbers[numNumbers];

boolean isInit = false; boolean lcdNeedsRefreshed = false; boolean isFirstButtonPush = true;

接下來是設定,我在這個部分用了一個小引導,說明這裡的動作。

void setup() {
pinMode(buttonPin, INPUT_PULLUP);

int eeprom=EEPROM.read(0); eeprom+=1; EEPROM.write(0, eeprom); randomSeed(eeprom);

lcd.begin(16, 2); lcd.home(); lcd.clear(); lcd.setRGB(colorR, colorG, colorB); lcd.setRGB(255,255,255); lcd.setCursor(0,0); lcd.print("HOLD FINGER ON"); lcd.setCursor(0,1); lcd.print("THE BUTTON"); delay(3000); lcd.clear(); }

然後是程式迴圈,這裡的迴圈使用幾個副程式,像底下這樣。

 

void loop(){

if(isFirstButtonPush){ readButtonPush(); if(!isInit){

isInit = true; } }else{ readButtonPush();

if(lcdNeedsRefreshed){ lcd.home(); lcd.clear(); printNumbersToLCD(); lcdNeedsRefreshed = false; delay(50); }

lcd.setRGB(50,255,11);

}

delay(200); }

void readButtonPush(){

int reading = digitalRead(buttonPin); lcd.scrollDisplayLeft(); lcd.setCursor(0,1); lcd.print(" Winning numbers! Or not.");

if(reading == LOW){ generateRandomNumbers(); isFirstButtonPush = false; lcdNeedsRefreshed = true; } }

最後是我在前面提到的副程式。

void generateRandomNumbers(){
for(int i = 0; i < numNumbers; i++){ numbers[i] = nextRandomNumber(); } }

int nextRandomNumber(){ int nextRandom = random(1,39); boolean isDuplicate = false; for(int i = 0; i < numNumbers; i++){ if(nextRandom == numbers[i]) isDuplicate = true; } if(isDuplicate) return nextRandomNumber(); return nextRandom; }

void printNumbersToLCD(){

lcd.setCursor(0,0); for(int i = 0; i < numNumbers; i++){ if(numbers){ lcd.print(numbers[i]); } if(i != 6) lcd.print("-");

} }

如果你有任何疑問,歡迎提出來,我會儘量回答。

步驟 3:開始賺錢。


就像我說的,這些號碼... 不一定會中獎!

什麼號碼會中,很難講。希望您中獎(如果中了頭彩,別忘了分我一成!)

這些數字可能產生的結果,有大約 1500 萬種可能性。

希望您喜歡我的專案,歡迎您追蹤我的動態,可以提早知道各項最新的專案。

感謝您的閱讀。

 

原文刊載於:

T客邦已取得授權翻譯轉載

Intel Developer Zone IoT的專區,有更多關於Edison開發板的資料和訊息,要多了解的讀者可以連進去看看。

ADVERTISEMENT