Skip to content

活動

螢火蟲

進階 | MakeCode, Python | LED 螢幕, 無線電 | 通訊, 選擇, 隨機化

步驟1:製作

利用無線電通訊將一組 micro:bit 變成一群神奇的螢火蟲

一組 micro:bit 透過無線電相互觸發,短暫地發出微光

您將學到什麼

  • 如何在 micro:bit 之間使用無線電通訊來觸發事件
  • 讓 micro:bit 的 LED 螢幕變亮或者變暗
  • 如何使用隨機的數字和機會來模仿真實世界的行為

它是什麼?

螢火蟲是利用生物體之發光(在其體內發出的光)來相互交流的昆蟲。

本項目利用 micro:bit 的無線電通訊功能來模擬真實世界中螢火蟲的行為。 Python 版本是由 Nicholas H. Tollervey 所創建的,而 MakeCode 版本就是以其為基礎創建的。

將該程式燒錄到同個房間內的至少三個 micro:bit 中。 按下任何一個 micro:bi 上的按鍵 A,您應該能看到「一群」micro:bit 收到無線電消息後被點亮。 在黑暗的房間裡面使用大量的 micro:bit 效果最佳。

一旦一個 micro:bit 收到無線電訊息後,它就有十分之一的機會來傳送自己的無線電訊息,從而讓另一波的 micro:bit 開始發光。

當燈光停止時,在任何一個 micro:bit 上按下按鍵 A 來重啟「一群」通訊。

運作方式

  • 當您按下其中一個 micro:bit 上的按鍵 A 時,該程式會利用無線電通訊來傳送一個訊息「flash」。
  • 當每一個 micro:bit 收到訊息後,它將會隨機地等待一段從 50 到 350 毫秒之間的時間。 然後它會讓 LED 螢幕閃爍變亮,再逐漸變暗,來模仿螢火蟲發光的樣子。
  • 然後會再隨機產生一個從 0 到 9 的數字。 如果數字是 0 的話,它將會傳送自己的「flash」無線電訊息來觸發更多的 micro:bit 螢火蟲發光。 所以它有十分之一的機會來觸發其他的 micro:bit 發光。
  • 您可以混搭舊版和新版的 micro:bit,但是他們都必須有燒錄自己的 MakeCode 或 Python 版本的程式。 (無線電通訊在每種程式語言中的工作方式都略有差異。 MakeCode 程式不能通過無線電與 Python 程式通信,反之亦然。)

你需要的東西

  • 至少 3 個 micro:bit,越多越好
  • micro:bit 電池組(選配)

步驟2:編碼

1# A micro:bit Firefly.
2# By Nicholas H.Tollervey. Released to the public domain.
3import radio
4import random
5from microbit import display, Image, button_a, sleep
6
7# Create the "flash" animation frames. Can you work out how it's done?
8flash = [Image().invert()*(i/9) for i in range(9, -1, -1)]
9
10# The radio won't work unless it's switched on.
11radio.on()
12
13# Event loop.
14while True:
15    # Button A sends a "flash" message.
16    if button_a.was_pressed():
17        radio.send('flash')  # a-ha
18    # Read any incoming messages.
19    incoming = radio.receive()
20    if incoming == 'flash':
21        # If there's an incoming "flash" message display
22        # the firefly flash animation after a random short
23        # pause.
24        sleep(random.randint(50, 350))
25        display.show(flash, delay=100, wait=False)
26        # Randomly re-broadcast the flash message after a
27        # slight delay.
28        if random.randint(0, 9) == 0:
29            sleep(500)
30            radio.send('flash')  # a-ha
31            
32

步驟3:進階

  • 更改螢幕閃爍時展示的圖像
  • 修改程式碼,使它可能較多或較少地在其他 micro:bit 上觸發另一個閃爍事件。 隨機數字的範圍可以與您擁有的 micro:bit 的數量匹配:如果您擁有較少的 micro:bit,就較會如此。
  • 使用不同的無線電群組號碼來製作更小的螢火蟲群組。 只有相同群組號碼的 micro:bit 能夠互相通訊。
  • 試驗改變無線電訊號的功率。
    使用 MakeCode 中的「radio set transmit power」區塊。
    在 Python 中,利用 radio.config(power=7)
    選擇一個介於 0 (最弱的無線電訊號) 和 7 (最強) 之間的數字。
    改變無線電功率有什麼效果?