1 圖示

image.png
2 目標一 :產生0-9數(shù)字

image.png
3 目標二: 按鍵 產生隨機數(shù)字

image.png
4 目標三: 預測下一個將要產生的數(shù)字

image.png
5 源碼閱讀
int thisResult; //存儲按鍵按下以后顯示在數(shù)碼管的數(shù)字。
int nextResult; //存儲作弊數(shù)字,也就是下一次按鍵按下后即將顯示的數(shù)字。
void setup() {
pinMode(2, INPUT_PULLUP); //2號引腳上連接有按鍵開關,將2號引腳設置為輸入上拉模式
int pinNumber = 3; //設置3-9號引腳為輸出模式
while(pinNumber <= 9){
pinMode(pinNumber, OUTPUT);
pinNumber = pinNumber + 1;
}
randomSeed(analogRead(A0)); //為了每一次復位或斷電后產生不同順序的隨機數(shù)字
}
// the loop function runs over and over again forever
void loop() {
if (!digitalRead(2)){ //讀取2號引腳電平狀態(tài)
getRandomNumber(0,10); //用戶按下按鍵后,開始新一次猜數(shù)字游戲
}
displayNumber(thisResult); //將猜數(shù)字游戲"結果"顯示在數(shù)碼管中
}
/*
用戶在每一次按下按鍵后,隨機產生的數(shù)字將存儲于nextResult變量中。
而實際顯示在數(shù)碼管上的數(shù)字是thisResult變量。
當thisResult即將顯示在數(shù)碼管前,程序會將下一次顯示的數(shù)字通過
圖形暗示的形式顯示在數(shù)碼管上。具體程序如何顯示暗示圖形,
請參閱displayCheat()函數(shù)說明。
*/
void getRandomNumber(int minNumber, int maxNumber){
thisResult = nextResult;
int i;
while(i < 15){
i = i + 1;
nextResult = random(0, 10);
displayRandom(); //顯示隨機圖案,混淆注意力
delay(50 + i * 10); //讓隨機圖案顯示時間由快到慢,增加混淆
displayClear();
}
displayCheat(nextResult); //顯示作弊圖案,用戶可通過此函數(shù)所顯示的圖案
//獲知下次按鍵后將要出現(xiàn)在LED數(shù)碼管上的數(shù)字。
//此圖案是在用戶每次按下按鍵后顯示新的數(shù)字
//前的最后一次圖案顯示
delay(500);
displayClear();
}
//根據(jù)參數(shù)數(shù)值在LED數(shù)碼管上顯示數(shù)字
void displayNumber(int ledNumber){
switch(ledNumber){
case 1: //顯示1
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
break;
case 2: //顯示2
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
break;
case 3: //顯示3
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case 4: //顯示4
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
break;
case 5: //顯示5
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case 6: //顯示6
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
break;
case 7: //顯示7
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
break;
case 8: //顯示8
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
break;
case 9: //顯示9
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
break;
case 0: //顯示默認
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
break;
default:
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
}
//清理顯示內容
void displayClear(){
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
//顯示隨機圖案以混淆注意力
//使作弊圖案顯示時不易察覺。
void displayRandom(){
int randomPin = random(3,9);
digitalWrite(randomPin, HIGH);
}
//顯示作弊圖案。
void displayCheat(int number){
switch(number){
case 1: // 顯示數(shù)字1作弊圖案
digitalWrite(3, HIGH);
break;
case 2: // 顯示數(shù)字2作弊圖案
digitalWrite(6, HIGH);
break;
case 3: // 顯示數(shù)字3作弊圖案
digitalWrite(4, HIGH); ;
break;
case 4: // 顯示數(shù)字4作弊圖案
digitalWrite(5, HIGH);
break;
case 5: // 顯示數(shù)字5作弊圖案
digitalWrite(9, HIGH);
break;
case 6: // 顯示數(shù)字6作弊圖案
digitalWrite(7, HIGH);
break;
case 7: // 顯示數(shù)字7作弊圖案
digitalWrite(8, HIGH);
break;
case 8: // 顯示數(shù)字8作弊圖案
digitalWrite(6, HIGH);
digitalWrite(4, HIGH);
break;
case 9: // 顯示數(shù)字9作弊圖案
digitalWrite(9, HIGH);
digitalWrite(7, HIGH);
break;
case 0: // 顯示數(shù)字0作弊圖案
digitalWrite(3, HIGH);
digitalWrite(8, HIGH);
break;
}
}