首页 >> 用Edison开发板自制乐透选号机吧!
用Edison开发板自制乐透选号机吧!
来源:  时间:2015-10-16
分享到:

这是一台简单、有效的乐透选号机。

你可以玩乐透游戏,与亲朋好友同乐或者真的拿这几个数字去买乐透。

每隔 250 毫秒,随机产生 7 个数字,从 1 到 39 之间的整数。

产生的数字可以任意变更。


第一步
组装



组装很简单。

除了 Intel Edison 开发板,还需要 Arduino 扩充板、LCD 屏幕,还有一个按钮。

我用一块 Shield 扩充板,连接按钮以及 LCD。

我用的按钮是一个简单的触摸板,可以感测到触摸的动作,而 LCD 屏幕则是 RGB 背光。

按钮连接到 Arduino 扩充板上的 D7,而 LCD 则连接到 I2C。


第二步
编码



将开发板连接到 PC,开始编写程序代码。

程序代码使用 EEPROM 储存产生的数字,所以屏幕上不会出现抽中相同数字的情形。

一开始,以 #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("-");

}

}



第三步
开始赚钱



就像我说的,这些号码... 不一定会中奖!

什么号码会中,很难讲。希望您中奖(如果中了头彩,别忘了分我一成!)

这些数字可能产生的结果,有大约 1500 万种可能性哟!