OLED 倒數計時器
這篇教學會使用 MakeCode 編輯 micro:bit 擴充板程式 ( EZ Start Kit+ ),透過 OLED 顯示器搭配按鈕開關、蜂鳴器、可變電阻,實作一個可以設定時間的倒數計時器
- 操作 EZ Start Kit+ 需要載入對應的擴充積木,請先參考:載入 EZ Start Kit+ 的程式積木。
- 更多資訊:ICShop EZ Start Kit+ 官方網站。
OLED 顯示倒數時間
倒數計時器的時間顯示格式,通常是以 00:00:00 來表示,如果要透過 OLED 來呈現,需要先將「數字」轉換成「文字」,接著在一位數的數字前方補零,就能做到同樣的效果,首先定義「啟動時」的一些變數,包含 h ( 時 )、m ( 分 )、s ( 秒 ) 和 start ( 是否開始,預設 -1 表示尚未開始 ) 以及 time ( 倒數計時的總秒數 )。
新增 change 函式,加入數字參數 num,負責將一位數的數字前方補零。
change 函式內容放入邏輯判斷,判斷如果輸入的數字小於 10,就將前方補零並轉換成文字,如果大於等於 10,直接將數字轉換成文字。
新增 show 函式,在第一列 ( x=0, y=0 ) 的位置顯示 H M S 的文字,在第二列顯示對應的時間,時間使用剛剛的 change 函式轉換數字為對應的文字。
新增 count 函式,加入數字參數 num,負責計算增加或減少秒數後的時間。
編輯 count 函式:
- 將 time 總秒數增加或減少 num。
- 判斷如果 time 小於 0,就讓 time 等於 0。
- 根據總秒數,計算出顯示的秒數 ( 總秒數除以 60 的餘數 )。
- 根據總秒數,計算出總共有幾分鐘 ( 總秒數除以 60 的商 )。
- 根據總共有幾分鐘,計算要顯示的小時數 ( 總分鐘中除以 60 的商 )。
- 根據總共有幾分鐘,計算要顯示的分鐘數 ( 總分鐘除以 60 的餘數 )。
- 計算出時間後,呼叫 show 函式,顯示時間。
回到「啟動時」積木,在最後方呼叫 count 函式,程式燒錄到 micro:bit 執行後,OLED 畫面就會出現 00:00:00 的文字。
使用按鈕開關和可變電阻,增加或減少時間
因為 EZ Start Kit 有可變電阻,所以能使用可變電阻進行秒數調整 ( 例如一次增加 1 秒或一次增加 300 秒 ),參考「OLED 顯示動態數字」文章,當調整可變電阻時,在 OLED 的右下角顯示可變電阻的數字,並將可變電阻的數字,以 10 為區間做變化 ( 最小值為 1 )。
編輯按鈕 A 與按鈕 B 的程式,如果 start 小於 0 時 ( 尚未開始倒數 ) 按下按鈕 A,呼叫 count 函式,增加可變電阻調整的秒數,按下按鈕 B,呼叫 count 函式,減少可變電阻調整的秒數。
將程式燒錄至 micro:bit 執行後,可以用可變電阻將左下角數值調整至 300,按下 A 按鈕,倒數的時間就會出現 00:05:00 ( 五分鐘 )。
倒數計時器
最後編輯倒數計時的程式:
- 同時按下 A 與 B 時,停止播放音效,並將 strat 乘以 -1 ( 就可以按一下開始,按一下暫停或停止 )
- 新增重複無限次積木:
- 如果 start 大於 0 ( 開始 ),呼叫 count 函式,傳入 -1 ( 每次減少一秒 )。
- 如果 time 為 0,表示倒數計時結束,播放音效。
- 每隔一秒執行一次。
完成後,就是一個非常完整的倒數計時器 ( 如果要將數字歸零,只要將可變電阻數值調整為最大,不斷按下 B 按鈕就可以歸零 )。
範例解答
- 範例解答: EZ Start Kit+ OLED 倒數計時器
延伸練習
如果已經熟悉了 EZ Start Kit+ OLED 倒數計時器的原理,還可以嘗試更多好玩的作法:
- 嘗試加入「貪睡機制」,例如時間到了之後,按下 A 按鈕可以多出一分鐘 ( 解答 )。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~