Arduino 學習筆記#11 每按一次按鈕,切換一次燈的暗亮

首先,先把開關按鈕接上pin7,再依照pin7的高低壓來決定p13 LED的暗亮。
程式碼的部分,先將pin7設好上拉電阻,讓他沒有接通GND的時候能維持在高電位,不受雜訊干擾。

程式碼部分,因為LED的狀態,受按下次數的影響而改變,所以先給他一個boolean變數(有true和flase兩個變數,分別可代表高電位HIGH和低電位LOW),並把它設定為false(=LOW)

再來利用buttonUp來記錄按鈕的狀態,並結合pin7的狀態一同判斷按鈕的狀態
- 按下按鈕:pin7處於高電位  且  buttonUp等於true(原本的狀態是Up, 尚未被改變 )
  則切換LED狀態並將該狀態寫入pin13,同時將buttonUp改為false
- 按鈕被放開:pin7處於低電位  且  buttonUp等於flase(曾被按下,但尚未切換回來)
  則將buttonUp改為true
- 還沒被按下:pin7處於低電位,而buttonUp等於true,兩個判斷式都不符合時,arduino則會在兩個判斷式間輪轉 直到符合條件(按下按鈕,讓pin處於高電位)為止
- 一直被按著:pin7處於高電位,而buttonUp等於false,同上

最後,為了解決debouncing的問題(按下去瞬間,因程式跑太快,來回切換status數次),可以在判斷是中加上delay(200); 以避免程式過度反應。

boolean status = false;
boolean buttonUp = true;

void setup(){
  pinMode(7, INPUT);
  digitalWrite(7, HIGH);
  pinMode(13, OUTPUT);
}

void loop(){
  if(digitalRead(7) == HIGH && buttonUp == true){
    status = !status;
    digitalWrite(13, status);
    buttonUp = false;
    delay(200);
  }else if(digitalRead(7) == LOW && buttonUp == false){
    buttonUp = true;
  }
}

學習網站:
Arduino #8 - 否定?彈跳?按鈕特輯 Part.1!
Arduino #9 - 邏輯?旗標?按鈕特輯 Part.2!
以開關切換LED狀態

Comments

Popular posts from this blog

Arduino 學習筆記#5 上拉電阻

Arduino 學習筆記#3 讀取接腳的狀態