WFU

2018年7月18日 星期三

微電腦基礎點亮LED之二:紅綠燈


作者:林明忠

實驗一:點亮一顆LED 燈,並讓LED閃爍


我請小妹妹自己定義Pin腳編號與LED閃爍時間,並且將時序圖與演算法寫在實驗記錄簿上。
小妹妹自己定義為『用Pin腳8 點亮一顆LED 燈26秒,並讓LED閃爍兩次,每次各一秒』。








程式執行後發現LED 燈會閃,但是頭尾閃爍時間不太對。經檢查後發現少了一個延遲設定,修改後就正常了。這個程式還可以再精簡,不過小妹妹可以做到這個的地步就不錯了。有些東西以後再要求即可。

實驗二:紅綠燈




接著我們開始第二個實驗,實驗題目是『紅綠燈』

我問小妹妹:「妳覺得紅綠燈要怎麼做?」

小妹妹:「再加兩個輸出Pin腳,每個Pin腳分別接上紅色與黃色LED。」

我問小妹妹:「要如何寫程式?」

小妹妹:「嗯………」

我說:「妳覺得馬路上的紅綠燈是怎麼動作的?」

小妹妹:「綠燈亮完,黃燈亮。黃燈亮完,紅燈亮。」

我說:「跟妳的時序圖有關系嗎?」

小妹妹:「噢!我知道了。」

我請小妹妹自己定義Pin腳編號與LED閃爍時間,並且將時序圖與演算法寫在實驗記錄簿上。

小妹妹自己定義『紅綠燈』為

  1. 用Pin腳8 點亮一顆綠色LED 燈5秒,之後讓綠色LED閃爍兩次,每次各0.5秒。
  2. 綠色LED 燈全滅後,用Pin腳9 點亮一顆黃色LED 燈1.5秒。
  3. 黃色LED 燈全滅後,用Pin腳10 點亮一顆紅色LED 燈8秒。








完成『紅綠燈』的實驗後,我問小妹妹說:「妳現在做的紅綠燈是微電腦開機後就自己循環動作,妳有沒有想過,妳還可以控制紅綠燈的啟動與停止。」小妹妹說:「真的嗎?怎麼做?」

我說:「還記得pinMode的設定與digitalRead這兩個副程式(指令)嗎?如果再另拿一隻Pin腳設定為INPUT或 INPUT_PULLUP 就可以在微電腦外部控制紅綠燈的啟動與停止。」

實驗三:紅綠燈與紅綠燈的啟動控制





接著,我們開始第三個實驗,實驗題目是『紅綠燈與紅綠燈的啟動控制』

解釋pinMode的INPUT_PULLUP與INPUT設定的差異後,我問小妹妹:「微電腦讀到妳給它的信號後它如何決定紅綠燈要不要啟動?」

小妹妹:「微電腦先讀信號,再做判斷。」

我問小妹妹:「要做那些判斷?」

小妹妹:「不知道。」

我說:「妳要先決定 輸入Pin腳 讀到HIGH或LOW時要啟動紅綠燈。在程式中用『if』判斷敘述,判斷 讀到的狀態 和 妳事先決定的狀態是否相同,如果相同則啟動紅綠燈。」




我請小妹妹自己定義Pin腳編號與LED閃爍時間,並且將時序圖與演算法寫在實驗記錄簿上。
小妹妹自己定義『紅綠燈』為

  1. 用Pin腳2 點亮一顆綠色LED 燈5秒,之後讓綠色LED閃爍兩次,每次各0.5秒。
  2. 綠色LED 燈全滅後,用Pin腳3 點亮一顆黃色LED 燈1.5秒。
  3. 黃色LED 燈全滅後,用Pin腳4 點亮一顆紅色LED 燈5秒。 

另外,將Pin腳1 設定為INPUT_PULLUP 模式,當Pin腳3狀態為LOW時紅綠燈啟動。




準備麵包板與零件時,小妹妹問:「開關在哪裡?」
我拿了一個磁簧開關給她。
小妹妹問:「開關長這樣? 要按哪裡呢?」




我說:「一般開關會有按鈕讓妳按,例如電腦的鍵盤。但是磁簧開關沒有按鈕,它是用磁鐵(場)來控制。當磁鐵靠近開關時,開關會導通(ON),磁鐵離開時開關會斷路(OFF)。」

解釋這個開關的使用方法後。請她將磁簧開關插到麵包板上。



接著開始修改程式。小妹妹問:「紅綠燈程式要全部重打到 if 裡面?」
我說:「不用,剪下來貼進去就可以,但是要注意縮排。」
然後執行程式。程式開始執行時,紅綠燈是不啟動的。我拿了一顆小磁鐵給小妹妹,讓她靠近磁簧開關,紅綠燈就開始動作。





實驗進行到這裡,小妹妹已經在微電腦上開了兩扇門,一個門做『輸出』功能,另一個門做『輸入』功能。實驗功能雖然簡單,但是微電腦對小妹妹來說已經不再具有神秘感。其實大部分的電子產品,就是重復在做這些工作。例如個人電腦就是重復讀取周邊(鍵盤、滑鼠…等等)的訊息,電腦內部處理完畢後,再輸出到相對應的周邊(螢幕、印表機…等等)。

現在問小妹妹覺得微電腦如何?

她直接回答:「它好笨,要先把事情切成一條條指令,才能讓它工作。」

我回答:「是啊,它傻瓜妳聰明。妳有沒有想過這些實驗還可以做哪些變化?」

小妹妹:「不知道。」

我說:「把磁簧開關換成光敏電阻,程式小修改後妳就可以用光線的明暗來控制紅綠燈。另外,再拉出一個輸出Pin腳,接上壓電蜂鳴器,再加一小段程式妳就可以讓微電腦發出聲音。」

小妹妹:「真的,什麼時候教我?」

我說:「妳先把這3個實驗消化完,找個時間重頭到尾講一遍給我聽,我確定沒問題之後,我們再做下一個實驗。」

小妹妹:「為什麼?」

我說:「就像學騎腳踏車一樣,剛學會騎腳踏車,難免搖搖晃晃的,還是要多加練習才有辦法熟練。」

到目前為止,我用3個小實驗讓小妹妹了解微電腦的基本運作方式,除了讓她親自『動手做』之外,還讓她自己決定要用哪一個Pin腳與LED閃爍時間。基本上,已經在培養她做『開規格』這件事。

自己『動手做』只是讓小妹妹培養手感,為將來的硬體除錯打基礎。『開規格』才是重點。將來小妹妹想要用電子裝置實現自己的創意(ideal),要會『開規格』才有辦法自己挑選硬體和規劃程式內容,實現自己的創意(ideal)。


進步循環的系列實驗

雖然只是一些小實驗,但是這些實驗讓小妹妹進入一個進步循環。往前邁進時也一邊補充新知識,讓小妹妹不至於感到課程艱澀難懂。我們會每隔一段時間(約兩個禮拜)設計一個新課程,讓小妹妹在不影響課業下,打下微電腦基礎。按照這個進度,明年暑假,就可以自己著手規劃自己的電子裝置,到時後再教她『規劃專案進度』,讓她自己試著掌控整個專案進度。



如果您是家長,想讓小朋友(小六(含)以上)體驗上面3個小實驗,我們將7月29日、8月5日、8月12日、8月19日(星期日) 有開辦單日入門課程(1天)。因為小朋友第一次上機入門,需要有人從旁指導,避免卡關的情形出現。等學員有初步經驗後,就可以採用日後提供的函授教材進行學習。

另外,想學這些課程,需自備筆記型電腦。而且學習後,需要自行練習,不能指望到教室上一天課,就會飛天盾地。

本課程也適合爸媽或社會人士報名參加。您將可運用於您與孩子的互動,而且學習新東西是不分年齡。

如果您是老師或是補習班,正在煩惱如何教學生學習微電腦(微處理機)或是資訊課程,請跟我們聯絡,我們可以幫您設計課程並做技術支援。

若是有興趣,請進入報名頁報名,報名頁面有列出上課時間、費用與實驗教材清單..等等詳細資料。