LED(燈光)顯示功能

除了使用基本的顯示功能來讓micro:bit上顯示出數字、文字、以及預設或自訂的圖形之外,其實micro:bit上面的25顆LED也可以透過(x, y)座標的方式來顯示,在這篇文章中就來說明如何進階控制這些LED。

不同於其它的開發板,micro:bit本身就具備有25顆LED可以用於顯示的資訊,而且它的每一顆LED均可以使用(x, y)座標單獨控制,除了可以指定某一特定點的LED加以顯示之外,還可以得知該點的目前狀態,以及使用切換的方式來控制該點的明滅,善加運用這些功能,就可以做多許多非常有趣的功能。

micro:bit在燈光的部份可以使用的積木分別如下:

其中,第一個積木顧名思義,就是直接指定(x, y)座標所在位置的LED要點亮它,第二個積木當然就是要讓該座標所在位置的LED熄滅。第三個積木比較有趣,它會依照(x, y)座標所在的LED做切換的操作,也就是如果原來是亮的就把它熄滅,如果原來是暗的就把它點亮。

倒數第二個積木是用來查詢(x, y)位置上的LED之明暗資訊,因為是傳回值而不是一個操作,所以它的積木形狀和其它的不一樣。

最後一個積木比較特別,它把整個LED當作是一個長條圖來看,你給它一個最大值,以及一個你要它顯示的值,它就會依照比例來顯示出LED所佔的比重。例如,我們把最大值設定為100,然後顯示值給它20,如下所示:

顯示出來的結果如下所示:

如果把顯示值改為50,則模擬器呈現如下所示的畫面:

接著分別是80和100的樣子:

長條圖計數器實作

利用這個特性,我們就可以編寫一個以長條圖為顯示的計數器或是倒數計時器,以下的程式積木就是以長條圖的方式來計時,由於是每0.1秒增加1,所以會看到LED會在10秒之後填滿。

上述程式搭配如果積木,可以做倒數計時,在時間到的時候隨即產生出時間到的效果。以下的程式積木讓我們的計時器在按下A按鈕時開始計時,如果按一下B按鈕就會暫停,再按一下B按鈕則會繼續,在10秒時間到的時候就讓畫面一直閃爍愛心的圖案。

上面的程式中使用了兩個變數,其中counter用來計數,這個之前有說明過了,而counting則用來決定是否要進行計數。0的時候不計數,1的時候計數,其實計不計數就是有沒有要加1啦。因此,在次迴圈中我們利用一個如果判斷檢查counting的內容,如果是1才加1,如果不是的話就不加。

其實使用counting的內容決定是否要把counter加1還有另外的寫法,不知道同學們有想到了嗎?(不用如果判斷式)

由於這個計數器的主迴圈中有兩個功能,最初是計時,而在時間到了之後改為以愛心閃爍來提示,因此,在主迴圈中要以一個如果判斷式,依照目前counter中的值來決定要執行哪一段程式積木,如果大於100,則執行閃爍功能,否則就執行計數的功能。

自製25秒計數器

由於LED共有25個,所以是否我們可以在每一秒過去了之後就點亮1個LED(或是相反,一開始的時候全亮,然後逐秒熄滅一個LED),一直到25秒之後全亮呢?當然可以,只是,要點亮或熄滅個別的LED指定位置時是以(x, y)座標來設定,但是在計數的時候卻是以0數到25來決定,因此,我們必須要把1到25的數字轉換成對應的(x, y)座標才行。假設我們的計數變數還是counter,則算式如下:

x=counter%5y=counter/5x = counter \% 5 \\y= counter / 5

其中,第一個式子是取其餘數,而第二個式子是整除。使用和上一個程式類似的架構,但是在顯示時,我們是直接操作LED的(x, y)座標。此外,由於是以一點一點顯示為主,所以一開始除了設定變數的初始值之外,還要把所有的LED通通都清除,當啟動時的程式積木以及A按鈕和B按鈕事件的程式積木如下所示:

主迴圈的內容改為如下:

依照這個方式,我們可以輕易在一個螢幕上顯示0-24或是1-25的數量,而不用等待數字捲動的方式去檢視2個位數的數值了。

使用LED來顯示溫度

例如,我們想要知道目前的溫度,最直覺的方法就是使用把溫度使用數字的方式顯示出來,溫度的數值是在「輸入」積木群中:

一般來說,我們只要使用顯示數字積木把這個數值顯示出來即可:

然而這樣會看到的是捲動的數字,為了要看一個溫度還要等一小段時間才行(等兩個數字元都顯示完畢)。

在一個畫面中顯示溫度的方法有很多,其中一個方式是之前使用的長條圖,假設最高溫為50度,則可以利用以下的方式在一個畫面中顯示溫度:

如此,當溫度為25度的時候,如下所示:

如果是38度的時候則為如下所示的畫面:

控制個別的LED

學會如何控制(x, y)座標的LED之後,我們就可以透過A和B按鈕來移動LED的點了。先假設y固定為4,x一開始是2,當按下A按鈕時把x-1,直到0為止,當按下B按鈕時把y-1,直到4為止,一開始的初始化程式積木設計如下:

我們希望當使用者按下A+B按鈕時也可以復原此狀態,因此在A+B按鈕之事件中做一個一模一樣的積木如下:

如果使用者按下了A按鈕,我們就要讓這個亮點往左移動,往左移動的程式積木如下所示:

按下B按鈕時要往右移動,如下所示:

同學們可以比較一下兩者差異的地方在哪裡喔。

這是一個製作動畫的基本技巧,同學們可要仔細研究一下喔。

使用隨機數來點亮LED

有一個有趣的隨機數積木,它在數學類積木中,可以指定要產生的數字從0到某指定值中任選一個傳回。利用這個特性,我們就可以讓隨機數來產生任意的(x, y)值,並據此切換該位置的LED亮或滅,達到小星星的效果,程式積木如下:

以下的程式積木搭配了亮度的設定

使用另外一種效果:

各位同學可以發揮自己的創意,善用隨機數以創造出更有趣的效果。