Originally published by Feb 4, 2020
本文最初發佈在deviceplus.jp網站上,而後被翻譯成英語。
在本文中,您可以瞭解如何在您的Arduino專案中使用輕觸開關以及其實際工作原理。
我們已經利用數位輸出使數位輸出引腳在HIGH (5V) 和LOW (0V) 兩種狀態之間切換,從而實現了對LED和馬達的控制。
另外,您還可以使用數位輸出來確認電子零件的狀態。數位輸出引腳還可以切換為數位輸入引腳。透過這樣切換,可以確認引腳上的電壓,並透過“LOW”和“HIGH”兩種狀態輸入。這些輸入值可用於控制其他電子零件。比如您可能希望在數字輸入為HIGH時使馬達運轉,在輸入為LOW時使馬達停止
實際上,利用開關等電子元件,可以使數位輸入引腳的狀態切換為0V或5V。
在本文中,我們將介紹如何使用開關實現數位輸入。
使用Arduino Uno,您可以將最初用於數位輸出的引腳D0到D13作為數位輸入引腳使用。可以透過程式切換為數位輸入模式,來確認引腳狀態。
0V輸入為“LOW”,5V輸入為“HIGH”。在程式中,LOW會被讀取為“0”,HIGH會被讀取為“1”。透過確認這些輸入值並執行條件分支等處理,即可控制工作狀態。
下面我們來實際嘗試一下用Arduino進行數字輸入。在這裡,我們使用跳線連接引腳5,並確認連接到5V電源和GND時的變化。創建以下程式並將其發送給Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const int DIN_PIN = 7; void setup(){ pinMode( DIN_PIN, INPUT ); Serial.begin( 9600 ); } void loop(){ int value; value = digitalRead( DIN_PIN ); Serial.println( value ); delay( 1000 ); } |
在第4行中,透過pinMode()指定“INPUT”,以將本次使用的引腳7切換為輸入模式。現在,您可以透過程式確認引腳狀態了。
獲取第11行由digitalRead()指定的引腳的狀態,並將其存儲在value變數中。如果是0V,則存儲為“0”,如果是5V,則存儲為“1”。
當您想確認獲取的狀態時,請使用“串列監視器”。對於Arduino而言,您可以使用用來從電腦傳輸程式的USB資料線將資料從Arduino發送到電腦。使用串列通訊可以收發資料。您可以使用串列通訊將透過數位輸入獲取的狀態發送到電腦進行確認。
如果您想在程式中使用串列通訊,請透過第5行的Serial.begin()進行初始化。此時需要指定通訊速度。然後,透過第12行的Serial.println()指定一個值,即可將資料發送到電腦。在本文中,我們使之發送存儲著數位輸入狀態的value變數的內容。
要確認Arduino透過串列通訊發送過來的資料時,請使用Arduino IDE中內建的“串列監視器”。要使用串口監視器,請按一下Arduino IDE右上角的“串口監視器圖示”(放大鏡圖示),即可顯示串列監視器畫面。將右下角的通訊速度設置為與程式的Serial.begin()中指定的通訊速度(本文為9600)相同的值。然後,螢幕上將會顯示0或1。
接下來,將跳線插入引腳7。將另一端連接到 GND,串列監視器上顯示“0”。也就是說,如果數位引腳為0V,您可以看到“0”(LOW)。同樣,當引腳7與5V電源連接時,您可以看到顯示內容變為“1”(HIGH)。
現在我們已經確認,輸入會根據引腳的狀態發生變化。
下面,我們嘗試用一個開關使數位輸入引腳在HIGH和LOW狀態之間切換。在本文中,我們使用的是按鈕型“輕觸開關”。
對於輕觸開關而言,當按下上方按鈕時,內部電路接通,進入通電狀態。當鬆開按鈕時,電路斷開,沒有電流流過。通常,在開關的四個角會配有引腳。如上圖所示配置時,左右引腳之間的間隙起到開關的作用。右側的上下引腳和左側的上下引腳是始終連接的。
如果將輕觸開關的一個引腳與數字引腳相連接,另一引腳連接到GND,則按下開關時內部電路會接通,引腳將直連GND。透過這樣做,您可以判斷只要按下開關,數位輸入就會變為“HIGH”。
但是,當沒有按下開關時,數位引腳將會處於沒有任何連接的狀態。在這種狀態下,施加在引腳上的電壓會變得不穩定。在不穩定狀態下,當用手觸碰引腳或有電池等靠近時,輸入可能會發生變化。
因此,我們在使用開關時會連接一種稱為“上拉電路”或“下拉電路”的電路。這種方法是借助電阻將數位引腳連接到電源或GND,可以起到穩定輸入狀態的作用。該電路連接到電源端時稱為“上拉電路”,連接到GND端時稱為“下拉電路”。在本文中將以上拉電路為例進行說明,但下拉電路的原理也是一樣的。
使用上拉電路時,在未按下開關的狀態下,開關透過一個電阻連接到電源。這樣,就與數字引腳連接電源時的狀態相同,輸入會穩定在5V(HIGH)。當按下開關後,數位引腳處於直接連接GND的狀態,因此輸入切換為0V(LOW)。
雖然處於電源與GND連接的狀態,但它們之間夾著一個電阻(通常為10kΩ左右),因此只會流過少量電流,不存在短路風險。
現在,讓我們使用輕觸開關實際輸入資料看看。需要準備好以下電子元件:
・ 輕觸開關
輕觸開關有很多種顏色可供選擇。您可以選擇任何您喜歡的顏色。
・ 10kΩ (1/4W)電阻
用於上拉電路的電阻。在10kΩ電阻上印有“棕黑橙金”顏色代碼。
準備好所需組件後,如下圖所示連接起來。將輕觸開關跨越麵包板中心的凹槽插入。
接下來,將前述的程式發送給Arduino,以透過串列監視器確認數位引腳7的輸入。可以看到,在未按下開關的狀態下,顯示“1”(HIGH),在按下開關時變為“0”(LOW)。
在Arduino Uno中,數位引腳內建有“上拉”功能,可以透過程式啟動該功能。如果使用內部的上拉功能,就不再需要外接電阻了。您只需連接開關即可,省時省力。
啟動上拉功能的程式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const int DIN_PIN = 7; void setup(){ pinMode( DIN_PIN, INPUT_PULLUP ); Serial.begin( 9600 ); } void loop(){ int value; value = digitalRead( DIN_PIN ); Serial.println( value ); delay( 1000 ); } |
您只需在第4行的數位引腳模式設置中指定“INPUT_PULLUP”即可。這樣就能啟動內建的上拉功能,從而能夠在未按下按鈕的狀態下穩定HIGH輸入。請注意,Arduino Uno中未內建下拉功能。
開關的輸入還可用來控制其他電子元件。在這裡,讓我們利用Arduino中安裝的LED(引腳13),嘗試實現在按下開關時點亮LED,並在鬆開開關時熄滅LED。所用的電路與前述的僅將開關連接到數位引腳時的電路相同。編寫程式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const int DIN_PIN = 7; const int LED_PIN = 13; void setup(){ pinMode( DIN_PIN, INPUT_PULLUP ); pinMode( LED_PIN, OUTPUT ); } void loop(){ int value; value = digitalRead( DIN_PIN ); if ( value == HIGH ){ digitalWrite( LED_PIN, LOW ); }else{ digitalWrite( LED_PIN, HIGH ); } delay( 100 ); } |
確認第14行的數位輸入值是否為“1”。在Arduino程式中,您也可以將“1”寫為“HIGH”,將“0”寫為“LOW”。為了便於理解,我們在這裡使用“HIGH”和“LOW”。
如果輸入為HIGH(未按下按鈕),則執行第15行,使引腳13切換到LOW,LED熄滅。如果輸入不是HIGH(按下按鈕),則執行第17行,使引腳13切換到HIGH,LED點亮。將程式發送到Arduino並按下輕觸開關,即可確認LED點亮。
我們成功了!現在,您可以在您的Arduino專案中使用開關來執行輸入了。
想瞭解更多有關Arduino的基礎知識嗎?歡迎查看相關的文章: