實驗現象:本實驗通過一個按鍵來控制一個發光二極管的亮滅。按鍵按一下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); //等待按鍵鬆手
}
}
}