No Code AI(肉寇)AI自動化兩日精通|實體6小時+線上6小時
|

【MakeCode】在micro:bit上實作混成(blended)計步器

   

作者:Ted Lee

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

圖 1:MakeCode 平台支援的三種程式語言

設計

我們以 micro:bit 最著名的計步器(step counter)範例來展示在同一開發平台上,一次使用三種程式語言來開發專案的過程。本專案的設計流程為:

  1. Shake:計步器 +1,以積木程式撰寫。
  2. A 按鈕:開始(start)計步,以 STS 撰寫。
  3. 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。

(作者為本刊專欄作家,本文同步表於作者部落格,責任編輯:謝涵如)

Ted Lee

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: Ted Lee

從工程師轉任中學教師,又為了捍衛教育理念,投身成為 STEAM 教育工作者,自稱「無可救藥的人文教育理想主義者」的李俊德(Ted Lee)。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *