一,电路搭建
1,根据太极创客提供的图纸尝试自己搭建电路,而后测试电路。
2,了解到数码管的工作原理,尝试在3136AS数码管上应用所学内容,由于在面包板上安装3136AS数码管会导致部分线路串联不能正常工作。
运行效果为,由一到九不断循环;若按下开关则,长时间显示b;
测试电路是否正确
二,代码编写
了解到,while循环(先判断,再执行)和do_while循环(先执行再判断)的不同;
以及应用switch case语句;
使用自定义函数,将几个重要功能分块,使loop函数更简洁,提高代码的利用率;
int thisResult; //存储按键按下以后显示在数码管的数字。
int nextResult; //存储作弊数字,也就是下一次按键按下后即将显示的数字。
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)); //为了每一次复位或断电后产生不同顺序的随机数字
}
// the loop function runs over and over again forever
void loop() {
if (!digitalRead(2)){ //读取2号引脚电平状态
getRandomNumber(0,10); //用户按下按键后,开始新一次猜数字游戏
}
displayNumber(thisResult); //将猜数字游戏"结果"显示在数码管中
}
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); //显示作弊图案,用户可通过此函数所显示的图案
//获知下次按键后将要出现在LED数码管上的数字。
//此图案是在用户每次按下按键后显示新的数字
//前的最后一次图案显示
delay(500);
displayClear();
}
//根据参数数值在LED数码管上显示数字
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: // 显示数字1作弊图案
digitalWrite(3, HIGH);
break;
case 2: // 显示数字2作弊图案
digitalWrite(6, HIGH);
break;
case 3: // 显示数字3作弊图案
digitalWrite(4, HIGH); ;
break;
case 4: // 显示数字4作弊图案
digitalWrite(5, HIGH);
break;
case 5: // 显示数字5作弊图案
digitalWrite(9, HIGH);
break;
case 6: // 显示数字6作弊图案
digitalWrite(7, HIGH);
break;
case 7: // 显示数字7作弊图案
digitalWrite(8, HIGH);
break;
case 8: // 显示数字8作弊图案
digitalWrite(6, HIGH);
digitalWrite(4, HIGH);
break;
case 9: // 显示数字9作弊图案
digitalWrite(9, HIGH);
digitalWrite(7, HIGH);
break;
case 0: // 显示数字0作弊图案
digitalWrite(3, HIGH);
digitalWrite(8, HIGH);
break;
}
}
三,完成运行,我们可以根据最后一次闪烁的图案判断出随机数。