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狀態
程式碼的部分,先將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
Post a Comment