手把手教你智能硬件開發(五) 開關按鈕


第5節 按鈕開關

對於硬件的控制,我們常用硬件開關來控制Arduino開發板上其他外接硬件的通斷邏輯。比如,一盞LED燈,硬件上最好有個開關,按一下開關,就讓LED燈亮,再按一下開關,就讓LED燈關閉。

開關的外形有多種式樣,四根引腳、三根引腳。不論是三引腳還是四引腳,原理都是相同的。如果選擇四引腳開關,開發者就得自己搭建一個簡單的電路;三引腳的按鈕開關是對四引腳開關的集成封裝,簡化了外圍電路的設計,很適合對硬件缺乏深入認識的軟件開發者。

這里我們選用使用最方便的三引腳按鈕開關。我們跟我學Arduino開發提供的按鈕開關,就是這樣的三引腳開關。

5.1 硬件連接

三引腳按鈕開關的引腳對應如下,

含義 引腳位置 連接 開發板引腳
控制 S <–> D10
VCC 電源 <–> 5V
接地 GND <–> GND

在實際的使用當中,按鈕開關經常連接到擴展板上。例如這里將按鈕開關連接到10組擴展口上,

含義 引腳位置 連接 擴展板引腳
控制 S <–> 10組S
VCC 電源 <–> 10組V
接地 GND <–> 10組G

5.2 控制代碼

首先我們初始化引腳,按鈕使用的是D10,就要初始化D10為輸入引腳,

int BUTTON_PIN = 10;

void setup() {
//D10是作為輸入使用的引腳
pinMode(BUTTON_PIN, INPUT);
Serial.begin(9600);
}

每按一次按鈕,都會觸發按下松開兩個響應,也就是說,按鈕按下后會自動彈起,不會保持被按下的狀態,

  1. 當按下開關按鈕的時候,S引腳會變成LOW電平;
  2. 當松開開關按鈕的時候,S引腳會變成HIGH電平;

所以當出現了這兩個變化的時候,才能判斷按鈕被按下並抬起了一次。

采用digitalRead()讀取按鈕對應引腳的電平,判斷它當前是否被按下,

//初始情況下,按鈕是沒有按下的,所以是HIGH電平
int oldButtonState = HIGH;

void loop() {

//讀取開關引腳的電平,判斷當前是否被按下
int buttonState = digitalRead(BUTTON_PIN);

//當前被按下(LOW),之前沒有被按下(HIGH),
//說明使用者按下了按鈕
if(buttonState == LOW && oldButtonState == HIGH)
{
Serial.println("button press down");
oldButtonState = buttonState;
}

//當前沒有被按下(HIGH),之前被按下(LOW),
//說明使用者松開了按鈕
if(buttonState == HIGH && oldButtonState == LOW)
{
Serial.println("button press up");
oldButtonState = buttonState;
}
}

5.3 查看結果

把以上代碼部署到設備上,打開串口調試窗口,按下並松開開關,可以看到類似如下輸出信息,


/*******************************************************************/

本系列課程使用到的Arduino開發板、擴展板以及其他相關的傳感器,各位可以根據我們文章中介紹的硬件在淘寶網選購。
您也可以在我們的網店跟我學Arduino編程中購買,這些相關硬件都由我們為您把關購買,為大家節省選擇的精力與時間。同時也感謝大家對我們這些碼農的支持。

最后再次感謝各位讀者對安豆的支持,謝謝:)

/*******************************************************************/


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com