这是一台简单、有效的乐透选号机。
你可以玩乐透游戏,与亲朋好友同乐或者真的拿这几个数字去买乐透。
每隔 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 万种可能性哟!