2016年8月27日 星期六

Arduino專案_LED 7段顯示器+按鈕

先前練習了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);
    }
  }
}


完成影片:













沒有留言:

張貼留言