1. 程式人生 > >arduino學習系列——按鍵控制LED燈

arduino學習系列——按鍵控制LED燈

一、器材
arduino UNO、麵包板、按鍵、連線線
二、連線圖
按鍵的兩邊一邊接地,另一邊與引腳2相連
這裡寫圖片描述
三、程式碼

#define LED 13
#define INPUT_KEY 2
int val = 0;
void setup(){
  pinMode(LED,OUTPUT);
  pinMode(INPUT_KEY,INPUT_PULLUP);
}

void loop(){
  ScanKey();
  if(val==1){
    digitalWrite(LED,!digitalRead(LED));
  }
}

void ScanKey(){
  val = 0;
  if(digitalRead(INPUT_KEY)==LOW){
    delay(20);
    if(digitalRead(INPUT_KEY)==LOW){
      val = 1;     
      while(digitalRead(INPUT_KEY)==LOW);
    }
  }
}

四、注意事項
1、按鍵有四個引腳,平放左右兩邊是對稱的,這裡要注意的是上下兩組對稱的引腳分別是聯通的(開始我以為同一邊的兩個引腳是聯通的,結果連線後LED總是無法點亮),一般的連結方法是將按鍵的四個引腳跨過麵包板中間的橋安放在麵包板上。
2、用時延加兩次檢測低電平來去除抖動。人的手按鍵時是會有抖動的,在按下的過程中都會有毛刺存在,如果不去抖動,LED燈就會出現閃爍好像不聽指揮一樣,所以要去抖動。這裡使用的方法是延時+兩次檢測低電平,即,首先檢測低電平,如果低電平出現,延時20毫秒,再次檢測是否是低電平,這樣經過20秒的時延,如果持續是低電平就說明按鍵的確被按下了。
3、判斷使用者按鍵擡起。採用while(digitalRead(INPUT_KEY)==LOW)這樣的一個迴圈語句判斷使用者是否已經擡起了按鍵,如果沒有擡起這時讀取的引腳應該是低電平,那麼就迴圈再次讀取,直到引腳變成高電平,退出迴圈,也就是按鍵被擡起了。
4、引腳2定義為輸入引腳,初始化時使用INPUT_PULLUP引數將其拉高(就是設定為高電平),如果使用者按下按鍵就相當於將該引腳與地線連線,也就是使輸入為低電平,然後再根據這個輸入的變化,將引腳13的LED燈點亮或者熄滅。注意這裡使用了!digitalRead(LED),也就是先讀取原來的值,然後給他取反,這樣就能夠輕鬆控制LED在點亮與熄滅之間切換。