第三章 數位輸入感測模組

Arduino主板是靠著輸入模組提供的信號來認知環境,輸入模組是負責輸出數位或類比信號給主板,「數位輸入感測模組」的數位輸出腳位信號只有0:低電位(Low)1:高電位(High)兩種輸出狀態,對於主板而言這類模組是數位輸入裝置

3-1 模組說明

數位輸入感測模組外部有三支接腳,「VCC」和「GND」為電源腳位,「S」為數位信號輸出腳位,以按鈕模組為例按下按鈕(),腳位「S」輸出 1:高電位(High)放開按鈕(),腳位「S」輸出 0:低電位(Low)。常見數位輸入感測模組有:按鈕模組、滾珠開關模組、觸摸開關模組、磁簧開關模組、光電開關模組、震動感測模組等。


有些「類比輸入感測模組」雖然主要是輸出類比信號,但會增加一個數位輸出腳位「D0」,此類模組上會有一個可用小十字螺絲起子調整的半可變電阻,用來調整臨界值決定在基準電壓以上時輸出高電位(High)基準電壓以時輸出低電位(Low)常見此類模組有:避障紅外線模組、煙霧偵測模組、溫度感測模組、聲音感測模組、循跡感測模組等。因此,此類擁有數位輸出腳位的「類比輸入感測器模組」也能當做主板的數位輸入裝置。


特別注意:按鈕模組會因不同廠商生產,輸出會剛好相反,一定要先測試確認,如發現不同請自行修改程式中的判斷條件。

有些按鈕模組」按下輸出 0:低電位(High)放開輸出 1:高電位(Low)

3-2 「S」可接至主板腳位

D2 ~ D13 :需設為「INPUT」,當按鈕按下數位值為「1」,放開按鈕數位值為「0」,而腳位空接時數位值為「0」(會依廠商按鈕模組而不同)。

A0 ~ A5 :按鈕按下輸出類比值大於「1000」,放開按鈕輸出類比值小於「20」。

3-3 範例1:偵測按鈕輸出狀態(按鈕模組)


說明:


按鈕模組接到數位腳位「D2 (如接線圖),在偵測「D2」腳位前需將「D2」設定為「INPUT」(輸入),並持續讓舞台的角色說出「D2」偵測值。


此範例的「按鈕模組」實完成後,請務必將「按鈕模組」更換成其他「數位輸入感測模組」一一測試,其中「滾珠開關模組」翻轉模組角度觀察輸出變化;「磁簧開關模組」、「霍爾磁性開關模組」(競賽套件為兩者之一)需使用磁鐵靠近觀察輸出變化


滾珠開關模組

磁簧開關模組

霍爾磁性開關模組

接線圖:

程式碼:

執行結果:

3-4、範例2:按鈕累加(按鈕模組)

說明:


同上一範例接線,當按鈕按下後將「Count」變數累加一,並持續讓舞台的角色說出「Count」變數值,每次累加後延遲0.2秒,防止變數值累加太快。


特別注意:如果執行程式後貓咪持續計數,代表讀取按鈕模組輸出相反,需將程式中的判斷條件1修改為0

接線圖:(同上一範例)

程式碼:

執行結果:

3-5、範例3:每按一次只加一(按鈕模組)


說明:


上一個範例當按鈕按下後不放開,「Count」變數會持續累加一,直到放開按鈕,此範例將改進上一範例,只有在按下去的瞬間「Count」變數才加一,做法是新增一個「Flag」變數記錄按鈕的前一個狀態(按下:Flag=1,放開:Flag=0),以此做為判斷是否累加的依據。


當按下按鈕後只有在其前一狀態是「放開」狀態(Flag=0)的情況下,才將「Count」變數加一,同時也將按鈕狀態設為「按下」狀態(Flag=1),避免後續繼續累加。


如果按鈕尚未放開,則因為前一狀態是處於「按下」狀態(Flag=1),則「Count」變數不會繼續加一,當按鈕放開時則將按鈕設為「放開」狀態(Flag=0),以便下次在按鈕按下時讓「Count」變數可以加一。



接線圖:(同上一範例)

程式碼:

執行結果:(同上一範例)


3-6、範例4:左按鈕加一,右按鈕減一(按鈕模組)

說明:


將二個按鈕模組分別接到「D2」、「D3」數位腳位(如接線圖),為了方便撰寫後續程式,新增「D2」、「D3」變數以便記錄二個按鈕的即時狀態,當按鈕被按下時(High),送出廣播訊息,在接收到廣播訊息事件時,如果是按下左按鈕「Count」加「1」,如果是按下右按鈕「Count」減「1」。


新增「Flag2」、「Flag3」變數來分別記錄二個按鈕的前一個狀態(0:放開;1:按下),防止按鈕在未放開時還持續送出廣播訊息。


此範例的單一按鈕功能雖然與前一範例功能相同,但程式寫法不太一樣,同學試著找找此範例的判斷條件記錄按鈕前一狀態的程式寫法與範例3有哪裡不一樣,並試著理解寫程式奧妙之處。



接線圖:

程式碼:

執行結果: