第 23 课 简单创作 - 数字骰子¶
介绍¶
在之前的实验中,我们学习了如何使用 7 段数码管并通过按键控制 LED。在本课中,我们将使用一个 7 段数码管和一个按键来创建一个简单的数字骰子。
所需器件¶
原理图¶
数字骰子背后的想法非常简单:一个 7 段数码管从 1 到 7 快速循环显示。当按下按键时,流动会减慢, 直到它停在一个数字上。当再次按下按键时,该过程将重复。
原理图如下所示:
实验步骤¶
第 1 步: 搭建电路.
第 2 步:打开代码文件 Lesson_23_Digital_Dice.ino
。
第 3 步:选择 开发板 和 端口。
第 4 步:点击 上传 按钮来上传代码。
你现在可以看到7 段数码管循环显示1~6。按下按键,显示速度会减慢,直到三秒后停止。再次按下按键,该过程将重复。
代码¶
代码分析¶
初始随机数来自A0
randomSeed(analogRead(0));
初始随机数是从 A0 生成的,随机数的范围是 0-1023。
数字骰子
void loop()
{
int stat = digitalRead(keyIn); //store value read from keyIn
if(stat == HIGH) // check if the pushbutton is pressed
如果是,相应的引脚为高电平。
{
num ++; // num adds 1
if(num > 1)
{
num = 0;
}
}
如果 num > 1,则清除该值。这是为了防止重复按压。所以不管你按多少次都算一次。
Serial.println(num); // print the num on serial monitor
if(num == 1) //when pushbutton is pressed
{
randNumber = random(1,7); //Generate a random number in 1-7
showNum(randNumber); //show the randNumber on 7-segment
delay(1000); //wait for 1 second
while(!digitalRead(keyIn)); //When not press button,program stop here.
让它一直显示最后一个随机数。
int stat = digitalRead(keyIn);
再次读取按键的状态。
if(stat == HIGH) // check if the pushbutton is pressed
如果是,请运行下面的代码。
{
num ++; // num+1=2
digitalWrite(ledPin,HIGH); //turn on the led
delay(100);
digitalWrite(ledPin,LOW); //turn off the led
delay(100);
if(num >= 1) // clear the num
{
num = 0;
}
}
}
//show random numbers at 100 microseconds intervals
//If the button has not been pressed
randNumber = random(1,7);
showNum(randNumber);
delay(100);
}
showNum() 函数
void showNum(int num)
{
digitalWrite(latchPin,LOW); //ground latchPin and hold low for transmitting
shiftOut(dataPin,clockPin,MSBFIRST,datArray[num]);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin,HIGH); //pull the latchPin to save the data
}
该功能是在7段数码管上显示 dataArray[]
中的数字。