2016年7月20日 星期三
[Arduino] Debounce 處理按下按鈕瞬間的訊號彈跳行為
程式logic是:
1. 檢查輸入是否有變化
2. 若輸入有變化,檢查是否離上次有變化的時間有一定的間隔(debounceDelay)
3. 若有一定的間隔,將當下的時間點latch住(lastDebounceTime),並檢查是否由High 變為Low
4. 若由High變為Low,則為按下按鈕的事件發生
void loop() {
input_pin12 = digitalRead(12);
if(digitalRead(12)==input_reg_pin12){ //1. 檢查輸入是否有變化
//do nothing
}else{
if((millis()-lastDebounceTime)>debounceDelay){
//2. 檢查是否離上次有變化的時間有一定的間隔
lastDebounceTime = millis(); //3-1 將當下的時間點latch住
if(input_reg_pin12==HIGH){ //3-2 檢查是否由High 變為Low
Serial.println("pin 12 triggered");
}
}
input_reg_pin12 = input_pin12;
}//end of loop
reference:
https://www.arduino.cc/en/Tutorial/Debounce