在〈mBlock & Arduino(2)點亮外接 LED〉中,看過了如何使用 Arduino 來控制輸出腳位,並使用 LED 來得知輸出腳位的狀態,使用 LED 來檢視腳位輸出是經常之應用,看過了基本的腳位輸出,接下來來看基本的腳位輸入,這邊要來透過按鍵開關來控制輸入的訊號。
認識按鍵開關
按鍵之類的開關有好幾種,有兩針腳、四針腳、六針腳等,兩針腳很單純,就是按下後兩個針腳會接通,四針腳或六針腳的話,實際上要看說明,瞭解哪些腳位是連通,而哪些是由開關控制,以常見的四針腳開關來說,腳位突出的一邊在按鍵按下前彼此不連通,而與對面腳位是連通的:

如果想實際測試按鍵開關的運作,可以使用 LED,例如設計以下的電路:

如果實際想接在麵包板上測試,5V 電源的部份,可以使用 Arduino 上的 5V 腳位,如下所示:

在讀取輸入訊號之前
在〈mBlock & Arduino(2)點亮外接 LED〉中談過,腳位 D0 到 D13 可以當作數位輸出與輸入腳位,在這邊,我們用其中一個腳位來試著讀取按鍵開關是否按下,不過,並非單純設計以下的電路就可以了:

這是因為此時輸入腳位沒有接受任何訊號或輸入懸空時,會因為周遭環境的原因(電子雜訊等)而變為不確定的值,因此,在按鍵實際按下前,輸入腳位可以藉由一個下拉電阻(Pull-down resistor)連接到 GND,或者是使用一個上拉電阻(Pull-up resistor),將輸入腳位保持在已知狀態。例如說,若使用下拉電阻,可以如下設計電路:

就大多數的電路而言,可以選用 10K Ω 的電阻(原因與其他考量,可參考 How do I calculate the required value for a pull-up resistor?);上圖的設計方式在按鍵按下時,輸入腳位會得到一個高電位值,未按下則是低電位值。
使用上拉電阻的話,可以如下設計電路:

這樣的設計方式下,在按鍵按下時,輸入腳位會得到一個低電位值,未按下則是高電位值。
利用按鍵控制貓咪
你可以利用程式來偵測按鍵是否按下,通常會使用 LED 燈來作為程式的輸出,像是即使使用上拉電阻方式,也是偵測到按鍵按下時,讓 LED 燈點亮,否則 LED 保持在未點亮狀態,不過,這邊稍微變化一下,希望按鍵按下時,Scratch 的貓咪可以喵喵叫,這樣比較有趣一些,你可以如下拉設電路:

我們打算讀取 D7 的輸入訊號,接著在 mBlock 中撰寫程式如下:

接著試著執行看看程式,在按下按鍵時,貓咪會發出 meow 的聲音,也會顯示以下的圖樣:

附帶一提的是,根據 Arduino - Digital Pins 中的說明,數位腳位都內建有上拉電阻,可以藉由 pinMode()
為 INPUT_PULLUP
來打開,這樣你在連接電路時,可以不用自行設置上拉電阻,不過,在 mBlock 中,並沒有對應的控制方塊可以使用的樣子。