3.按鍵控制LED燈亮滅

實驗現象:本實驗通過一個按鍵來控制一個發光二極管的亮滅。按鍵按一下LED點亮。再按一下LED熄滅。

理論學習

該實驗主要難點

 如何掃描按鍵的狀態?

 如何防抖動?

 原理講解

   按鍵檢測原理:通過把Arduino的數字IO設置爲輸入狀態來監控按鍵是否按下,當按鍵未按下的時候因爲有上拉電阻的存在,讀到的電平爲HIGH,當按鍵按下時候因爲按鍵引腳接地,所以讀回來的電平爲LOW,由此判斷按鍵是否按下。
   按鍵去抖動原理:因爲人手的機械動作使按鍵按下時候會產生大概20ms左右的按鍵抖動,如果Arduino在這20ms內去檢測IO口的電平很可能會檢測出來不穩定的信號。因此,在檢測到低電平後延遲20ms再檢測可以起到軟件去抖動的作用。
   鬆手檢測原理:所謂的鬆手檢測就是程序無線循環等待按鍵鬆開,即讓程序不停的去檢測IO狀態,如果恢復了HIGH就跳出循環。
代碼爲while(diitalRead(KEY)==0);

程序代碼
#define LED 13
#define KEY 2

int KEY_NUM = 0;			//按鍵鍵值存放變量

void setup()
{
  pinMode(LED,OUTPUT);			//定義LED爲輸出引腳
  pinMode(KEY,INPUT_PULLUP);		//定義KEY爲帶上拉輸入引腳
}

void loop()
{
  ScanKey();				//按鍵掃描程序,當按鍵按下時候,該子程序會修改KEY_NUM的值
  if(KEY_NUM == 1)			//是否按鍵按下,如果ScanKey函數掃描到按鍵就會設置KEY_NUM值爲1
  {   
    digitalWrite(LED,!digitalRead(LED));		//LED的狀態翻轉
  }
}

void ScanKey()						//按鍵掃描程序
{
  KEY_NUM = 0;					//清空變量
  if(digitalRead(KEY) == LOW)			//有按鍵按下
  {
    delay(20);				//延時去抖動
    if(digitalRead(KEY) == LOW)		//有按鍵按下
    {
      KEY_NUM = 1;			//變量設置爲1
      while(digitalRead(KEY) == LOW);	//等待按鍵鬆手
    }
  }
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章