2021年11月21日 星期日

彈跳問題

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;  // 儲存按鍵讀值

}

沒有留言:

張貼留言

algorithm

 #include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv)  { for(int j=2;j<=100;j++)//j...