先前練習了LED七段顯示器,製作了一個倒數計時裝置。這次想要加上一個按鈕,
讓數字不停的快速轉換時,當按下按鈕,就使數字暫停一段時間,如同抽號碼機
器一樣。利用原本的程式碼進行修改。在顯示完一個數字後進行按鈕是否按壓的
偵測,如果第11腳位收到HIGH,即表示按鈕有按壓,利用delay暫停顯示數字。
電路連接圖:
程式碼:
//Arduino七段顯示器範例程式
//此為共陰極設定,若是共陽極,0與1互換即可
//1 = 開啟,0 = 關閉LED
//Arduino 腳位; 2,3,4,5,6,7,8
//設定11腳位為輸入,讀取按鈕數值
//二維陣列,儲存每個數字的LED電壓狀態
byte seven_seg_digits[10][7] = {
{1,1,1,1,0,1,1}, // = 0
{0,0,1,1,0,0,0}, // = 1
{1,1,0,1,1,0,1}, // = 2
{0,1,1,1,1,0,1}, // = 3
{0,0,1,1,1,1,0}, // = 4
{0,1,1,0,1,1,1}, // = 5
{1,1,1,0,1,1,1}, // = 6
{0,0,1,1,0,1,1}, // = 7
{1,1,1,1,1,1,1}, // = 8
{0,1,1,1,1,1,1} // = 9
};
int buttonPin = 11;
int buttonState = 0;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(buttonPin, INPUT);
writeDot(0); //程式開始時,小數點熄滅
}
//自訂函式,控制小數點亮滅狀態
void writeDot(byte dot) {
digitalWrite(9, dot);
}
//自訂函式,控制3個變數值,讓數字倒數
void sevenSegWrite(byte digit) {
byte pin = 2;
for (byte segCount = 0; segCount < 7; ++segCount) {
digitalWrite(pin, seven_seg_digits[digit][segCount]);
++pin;
}
}
void loop() {
for (byte count = 10; count > 0; --count) {
delay(50);
sevenSegWrite(count - 1);
buttonState = digitalRead(buttonPin); //設定按鈕變數值,偵測按鈕是否被按壓
if (buttonState == HIGH) {
Serial.println(buttonState);
delay(5000);
}
}
}
完成影片:
沒有留言:
張貼留言