byte bnt_pin2 = 2; // 按鍵pin腳
byte btn_state; // 按鍵讀取狀態的變數
byte reading;
byte led_pin3 = 3; // LED pin
byte led_state = HIGH; // 宣告LED的狀態,一開始預設為不亮
byte last_btn_state = LOW; // 上次的按鍵讀取狀態變數
long last_debounce_time = 0; // 記錄上一次消除彈跳的時間
long debounce_delay = 50; // 消除開關彈跳的延遲時間設為50ms
void setup()
{
pinMode(bnt_pin2, INPUT);
pinMode(led_pin3, OUTPUT);
digitalWrite(led_pin3, led_state); // 設定LED初始狀態
}
void loop()
{
reading = digitalRead(bnt_pin2); // 讀取按鍵開關狀態
if (reading != last_btn_state) // 當開關壓下或有雜訊時,開關狀態有改變(不相等)
{
last_debounce_time = millis();// 重設上一次的消除彈跳時間
}
if ((millis() - last_debounce_time) > debounce_delay)// 現在與上次時間點的差值有無超過debounceDelay,若有,代表時間到,可將LED轉態
{
if (reading != btn_state)
{
btn_state = reading; // 如果按鍵狀態有改變
if (btn_state == HIGH) // 只有在buttonState為HIGH時才將ledState轉態
{
led_state = !led_state;
}
}
}
digitalWrite(led_pin3, led_state); // 將 ledState 的值直接輸出至LED
last_btn_state = reading; // 儲存按鍵讀值
}
沒有留言:
張貼留言