前言

在傳統的電路上,按鈕一直是一個很常見且重要的元件,可用來作為開關之用,控制電路的斷開或形成迴路。即使在數位電路上,按鈕仍有其不可忽視的重要性。數位電路上有各種不同樣式的按鈕,而在這篇文章中我們將利用 WFduino 與 Scratch 3 來判斷按鈕的狀態,並依此狀態來控制 LED 燈泡的明滅。

四接腳接觸式瞬時按鈕

在此範例中我們將使用四接腳接觸式瞬時按鈕,而這篇文章提供了按鈕的說明,可先予以參考。

瞬時按鈕-正面

瞬時按鈕-正面

開發環境建置

如果你還沒有建置 WFduino + Scratch 3 的開發環境,請參考這篇文章

線路圖

Arduino 與瞬時按鈕

Arduino 與瞬時按鈕

  1. 我們已經相當熟悉 LED 燈泡的接法,陽極 (長腳) 連結至 Arduino 腳位 8,而陰極 (短腳) 則串聯一個 220 歐姆的電阻後連接至 GND 腳位。
  2. 瞬時按鈕的右下接腳連接至 GND 腳位,左上接腳則連結至 Arduino 腳位 7。請注意瞬時按鈕的左上與左下兩個接腳是連通的,而右上與右下兩個接腳也是連通的。因此使用時必須一端使用左方的接腳,另外一端使用右方的接腳,如此才能在按鈕未按下前維持斷開的狀態。

範例程式

Arduino 與瞬時按鈕 (Scratch 3 範例)

Arduino 與瞬時按鈕 (Scratch 3 範例)

  1. 在這個範例中,程式需要判斷腳位 8 的電位狀態,以便知道瞬時按鈕是否已被按下。當按下按鈕時,因為腳位 8 直接連結到 GND,所以會呈現低電位的狀態。也就是說,當按鈕未被按下前腳位 8 應該呈現高電位,如此一來程式才能加以區別。但是我們要怎麼樣才能讓腳位 8 在按鈕未按下前呈現高電位呢?大多數的數位控制板 GPIO 提供了所謂上拉電阻的功能,可以讓 GPIO 在設定為輸入且未連接到任何外部電位時呈現高電位的狀態。在這個範例中,因為按鈕未按下時按鈕的左上接腳並未連接任何東西,也就是沒有連接外部電位,所以可用上拉電阻功能成為高電位狀態。
  2. 程式將腳位 7 設定為 “輸入上拉電阻” 模式。如果設定為 “輸入” 模式,程式將無法正確判斷按鈕是否已被按下。
  3. 程式將腳位 8 設定為 “輸出” 模式,將用來控制 LED 燈泡的明滅狀態。
  4. 程式不斷檢查腳位 7 的電位狀態。當處於低電位狀態即表示按鈕已被按下,此時則將腳位 8 設定為高電位,以便點亮 LED 燈泡。否則便將腳位 8 設定為低電位,熄滅 LED 燈泡。
  5. 除了上拉電阻外,另外還有下拉電阻的形式。不過一般而言,數位控制板的 GPIO 通常並不提供下拉電阻的功能,當然 Arduino 的 GPIO 也沒有提供此一功能。儘管如此,如果我們的電路需要使用到下拉電阻,可以使用外接電阻達到同樣的目的。也就是說,GPIO 的上拉電阻功能只是簡化我們的接線,並不是甚麼無法取代的特異功能。
  6. 在這個範例中程式不斷地詢問腳位 8 的電位狀態,並根據詢問結果做出不同的反應,而這種不斷重複詢問的這種方式稱為輪詢。除了輪詢外,Arduino 也支援事件通知的機制,可以在電位發生變化時主動通知程式做出反應。事件通知機制與輪詢相比通常有使用資源較少,即時性與正確性高,程式碼較為簡潔易懂等好處。但是很可惜的是 WFduino 並不支援 Arduino 的事件通知機制,因此我們僅能使用輪詢方式來達到我們的目的。對輪詢與事件通知機制有興趣的朋友,可以參考這邊的說明
Facebook 留言
Print Friendly, PDF & Email
Summary
WFduino + Scratch 3 + Arduino 控制瞬時按鈕
Article Name
WFduino + Scratch 3 + Arduino 控制瞬時按鈕
Description
在傳統的電路上,按鈕一直是一個很常見且重要的元件,可用來作為開關之用,控制電路的斷開或形成迴路。即使在數位電路上,按鈕仍有其不可忽視的重要性。數位電路上有各種不同樣式的按鈕,而在這篇文章中我們將利用 WFduino 與 Scratch 3 來判斷按鈕的狀態,並依此狀態來控制 LED 燈泡的明滅。
Author
Publisher Name
Everlearn Studio
Publisher Logo