iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
自我挑戰組

micro:bit 從入門到精通系列 第 17

Day 17 ( 中級 ) 燈光繞圈圈 ( 數字函式 )

燈光繞圈圈 ( 數字函式 )

教學原文參考:燈光繞圈圈 ( 數字函式 )

這篇文章會介紹如何使用「函式」、「邏輯判斷」、「重複無限次」、「變數」、「點亮」、「加減乘除」等積木,做出計算亮燈數量,並讓燈光在 micro:bit LED 外圍繞圈圈的光線效果。

相關文章參考:重複無限次函式變數點亮邏輯判斷加減乘除

積木程式原理

有別於「燈光繞圈圈 ( 座標 )」是使用座標的方式繞圈,這邊要建立一個「燈數」的函式來進行繞圈,開始前先定義每個燈的數字,最外圈總共有 16 個燈,從左上開始順時針繞一圈,定義 1~16 的數字

micro:bit - 燈光繞圈圈 ( 數字函式 )

因為 micro:bit 是以每個 LED 的「座標」來亮燈,所以如果要使用「燈數」,最後仍然必須轉換為座標的方式,轉換公式如下 ( 燈數以 num 表示 ):

燈數 x y
1~5 num - 1 0
6~8 4 num - 5
9~13 13 - num 4
13~16 0 17-num

micro:bit - 燈光繞圈圈 ( 數字函式 )

了解原理後,開始實作程式積木,首先建立一個函式,函式名稱命名為「燈數」,並在函式裡加入一個 num 的變數

micro:bit - 燈光繞圈圈 ( 數字函式 )

函式建立後,按照之前燈數和 xy 座標的定義,使用邏輯判斷、變數、加減乘除積木,組合成下圖的程式。

micro:bit - 燈光繞圈圈 ( 數字函式 )

最後要進行執行函式點亮 LED 燈的程式:

  • 當啟動時,建立一個變數 a,並將 a 設定為 0。
  • 在重複無限次積木裡,每次重複時將變數 a 的數值增加 1,並呼叫函式
  • 函式根據變數 a 的數值,點亮指定的燈。
  • 每次重複暫停 100 毫秒。

micro:bit - 燈光繞圈圈 ( 數字函式 )

完成後,重新啟動 micro:bit,就會看見燈光繞著外圈依序亮起。

micro:bit - 燈光繞圈圈 ( 數字函式 )

如果只要讓單一顆燈亮起,不要所有燈都亮,可以透過修改函式著手,將滑鼠移到函式積木上方,按下右鍵,點選「編輯函式」。

micro:bit - 燈光繞圈圈 ( 數字函式 )

點選上方「布林值」按鈕,替函式增加布林值的參數,並將名稱命名為「亮燈」。

教學參考:函式參數

micro:bit - 燈光繞圈圈 ( 數字函式 )

修改函式積木,在最下方新增邏輯判斷,判斷「如果亮燈等於 true,就點亮這個座標的燈」,「如果亮燈等於 false,就熄滅這個座標的燈」。

micro:bit - 燈光繞圈圈 ( 數字函式 )

最後修改重複無限次積木,加入「呼叫燈數」函式,燈數設定為 a - 1,並將亮燈設為 flase,就能將前一顆燈熄滅,接著放入一個邏輯判斷,判斷如果 a 大於 16,就讓 a 從 1 開始

micro:bit - 燈光繞圈圈 ( 數字函式 )

完成後,重新啟動 micro:bit,就會看到一顆燈不斷繞著畫面轉圈。

micro:bit - 燈光繞圈圈 ( 數字函式 )

範例解答

範例解答:燈光繞圈圈 ( 數字函式 )

延伸練習

如果已經熟悉了燈光繞圈圈 ( 數字函式 ) 的原理,還可以嘗試更多好玩的作法:

  • 嘗試讓 LED 從另外一個方向 ( 逆時針 ) 繞圈圈 ( 解答 )。

關於我

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,如果對我有點興趣(笑,可以與我聯繫,一起來做點有玩又有創意的東西吧!


上一篇
Day 16 ( 中級 ) 燈光繞圈圈 ( 座標 )
下一篇
Day 18 ( 中級 ) 陣列點燈 ( 顯示圖形 )
系列文
micro:bit 從入門到精通46

尚未有邦友留言

立即登入留言