作者:Ted Lee
本單元將帶領讀者們在一塊micro:bit主板上由 MakeCode 平台提供的積木(Blocks)、靜態型別腳本(Static TypeScript,STS)和 Static Python(SP)三種程式語言開發工具,透過實作來體驗不同程式語法的異同處,如圖 1 所示。

圖 1:MakeCode 平台支援的三種程式語言
設計
我們以 micro:bit 最著名的計步器(step counter)範例來展示在同一開發平台上,一次使用三種程式語言來開發專案的過程。本專案的設計流程為:
- Shake:計步器 +1,以積木程式撰寫。
- A 按鈕:開始(start)計步,以 STS 撰寫。
- B 按鈕:重置(reset)計步,以 SP 撰寫。
積木
當我們搖晃主板時,會觸動它內部的加速度感測器(accelerometer)[註1]而引發 Shake 事件(event)。此時 micro:bit 若是處於計步狀態(已先按了 A 按鈕啟動計步功能),即計步控制旗標 flag 已被設定為 ,則讓計步 +1。
其中,這個處理的過程稱為事件處理(event handling)。我們將處理流程繪製於圖 2,而圖 3 則是以 MakeCode 積木語言來實作(implement)[註2]這一整個處理流程。

圖 2:Shake 事件的處理流程

圖 3:以積木程式來實作Shake 事件
STS
在 MakeCode 平台最上方中間的按鈕中按下JavaScript切換到 STS 的程式編輯頁面,然後我們要建立按鈕 A 被按下的處理流程:顯示向下的箭頭表示計步開始,接著將計步控制旗標 flag 變為 1。程式碼如下:
input.onButtonPressed(Button.A, function () {
basic.showArrow(ArrowNames.South)
flag += 1
})
其中,按鈕 A 的事件處理語法為
input.onButtonPressed(Button.A, 事件處理匿名(anonymous)副程式)
SP
在 MakeCode 平台上方中間,JavaScript 按鈕右側的下拉式選單中選擇以 Python 語法來撰寫 B 按鈕按下後的事件處理:重置。
def on_button_pressed_b():
global flag, no
flag = 0
no = 0
basic.show_number(no)
input.on_button_pressed(Button.B, on_button_pressed_b)
其中,按鈕 B 的事件處理副程式語法為:
def 副程式名稱():
[註3]
學習參考
本單元配合南一書局出版的資訊科技教科書之七年級,第一冊,第3 章 演算法與程式設計,1-2 節程式語言簡介。
進階學習
1.有沒有方法可以讓這個 micro:bit 計步器以無線的方式將資料傳到 MakeCode 的資料日誌(Data Logger)上?
有,用兩塊主板,計步器端(發射端)裝在智慧手錶上,另一邊的接收端裝連結電腦。連結的架構圖如圖 4 所示。
其中,智慧手錶透過主板上的 2.4 G Hz 無線電廣播(radio)技術術通訊。另一方面,接收計步資料的主板則以有線的 USB/ micro USB 傳輸線,透過 WebUSB 技術,將此資料送給 MakeCode 處理之。

圖 4:資料日誌使用無線廣播架構圖
2.這個計步器準嗎?
根據此處說明,誤差的步數約在 100 步以內。
3.加速度感測器座落在主板的何處?
根據圖 5 的 micro:bit 官方文件,意法半導體生產的這顆感測器LSM303AGR 被安在主板背面的左下角處,印刷電路板上印有白色的 ACCELEROMETER 字樣標示,

圖 5:加速度感測器的實體
4.micro:bit 計步器是如何測得移動的步數?
此篇中提及板載的加速感測晶片中有「壓電陶瓷材料」來偵測不同加速度在這種材料上產生作用力時,因其迴饋的電壓不同,而能區別移動的步數。
科技領綱指標
- 核心素養
科-J-B1 具備運用科技符號與運算思維進行日常生活的表達與溝通。 - 學習表現
運 t-V-2 能使用程式設計實現運算思維的解題方法。
※運 r-V-3 能利用程式語言表達運算程序。 - 學習內容
資 A-IV-1 演算法基本概念。
資 P-IV-1 程式語言基本概念、功能及應用。
完整程式碼
本範例的積木完整程式碼如 圖 6 所示、STS 詳列於 圖 7 和圖 8 為 SP 版本。註:建議先學會以流程圖來表達對原始問題的解法後,再以最快速的方式從流程圖來轉換到積木語言。最後,挑一個目標(target)高階程式語言(high-level programming language)來學習即可。其中,如果目標訂在網頁前後端程式開發,則選擇深入 STS 語法(syntax)。另一方面,如果未來想學 AI,則可考慮學習 SP[註4]。

圖 6:本範例的積木完整程式碼
input.onButtonPressed(Button.A, function () {
basic.showArrow(ArrowNames.South)
flag += 1
})
input.onButtonPressed(Button.B, function () {
flag = 0
no = 0
basic.showNumber(no)
})
input.onGesture(Gesture.Shake, function () {
if (flag == 1) {
no += 1
basic.showNumber(no)
}
})
let no = 0
let flag = 0
basic.showIcon(IconNames.Heart)
basic.clearScreen()
圖 7:本範例的 STS 完整程式碼
def on_button_pressed_a():
global flag
basic.show_arrow(ArrowNames.SOUTH)
flag += 1
input.on_button_pressed(Button.A, on_button_pressed_a)
def on_button_pressed_b():
global flag, no
flag = 0
no = 0
basic.show_number(no)
input.on_button_pressed(Button.B, on_button_pressed_b)
def on_gesture_shake():
global no
if flag == 1:
no += 1
basic.show_number(no)
input.on_gesture(Gesture.SHAKE, on_gesture_shake)
no = 0
flag = 0
basic.show_icon(IconNames.HEART)
basic.clear_screen()
[註1]加速度感測器只能測到板子的平移運動(translation movement)。相對的,若要偵測主板的轉動(rotation),則需外接陀螺儀(gyroscope)。
[註2]在概念上,流程圖比程式更接近人類的思考。所以,我們會想問題的解法畫成邏輯的流程圖,然後再以不同的程式語言來撰寫程式。
[註3]請注意在副程式中的指令都要以四個空白或 tab 鍵做為區塊內指令的縮排(indentation),且不可混用。
[註4]還有一種和 SP 語法相近,用來撰寫微控制器(Micro Control Processor,MCU)的一種程式語言叫 Micro Python。
(作者為本刊專欄作家,本文同步表於作者部落格,責任編輯:謝涵如)
- 用GenAI生成連連看樣板 - 2025/05/15
- 細談「春仔產生器」的專案拆解 - 2025/04/17
- 用生成式AI打造「春仔」產生器 - 2025/03/12
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!