配合 gamer:bit 控制 Omni Wheel 小車
gamer:bit 有6個按鈕 , 我們可以利用 micro:bit makecode 內的 extension 來編程每個按鈕的指令 。
omni wheel 小車除了能前後行駛外 , 還能向左/右什至斜向行駛 ,
因此配合有多個按鈕的 gamer:bit 來控制小車會是其一個控制選擇。
假如你是首次接觸 gamer:bit , 可先看 gamer:bit 簡單教學
所需材料 :
micro:bit x 2
Omni Wheel car model x 1
Robotics board x 1
gamer:bit x 1
編程教學 :
我們將利用 gamer:bit + micro:bit A 以 radio 形式發送訊號至 omni wheel car 的 micro:bit B 上,
micro:bit B 收到訊號後便會啟動 Motor , 以不同方向移動。
gamer:bit 部份(遙控及發送訊號) :
加入 Extension :
按下 「Advanced」然後再按「Extensions」
輸入 「gamer:bit」 , 然後選擇圖片上的「gamer-bit」
設定 radio :
將 radio set group 設為1 (也能是其他數字) , 接收訊號的 micro:bit 亦需為同一組 radio group。
從 gamer:bit 的 extension 取出 「gamer:bit on P0 .... down」 , 這代表按下 gamer:bit 的 P0 按鈕(上制)
radio 便 send number 2 至另一塊 micro:bit , 你也能使用 send string 或其他方法 。
number 的好處是較易處理編程 , 但數字會較容易輸入錯誤 ; string 的好處是可直接發送"right"這樣的文字指令 ,
在編寫輸出的代碼是較不容易發生錯誤 i.e. 接收 "right" 寫成向前行駛 , 但接收 "2" 就需憑自己的判斷編寫代碼
micro:bit A 上的編程 :
由於 gamer:bit 並不支援同時讀下2個Pins i.e. 同時按下 右+上 要發出向右上方行駛這種指令 ,
我們需利用 micro:bit 上的 A , B 制來處理這些情況
micro:bit B Omni Wheel Car :
radio group 一樣設成 1 , 這樣才能收到由 gamer:bit 發送的訊號
Function :
由於 Omni Wheel 小車有很多個移動方向 , 為免讓編程過於累贅 , 我們將利用 function 簡化編程。
function 的作用是組織代碼 ,呼叫重複會用到的代碼 , 並能簡化整個編程方便進行 DEBUG 。
建立 Function :
按下 「 Make a Function」。
輸入 function 的名稱
加入 「 turn off all outputs」至 stop motor 的 function
當 receivedNumber = 0 時 , 便 call Stop Motor 以使小車的所有 Motor 都停下來
向前/向後 :
同樣利用 Function 儲起 on direction 這種繁複的編程 , 然後在 else if receivedNumber 利用 Call function 取代。
這樣 if the else 的編程就會變得簡潔 , 能力較弱的學生在看到編程時也能會得到初步理解。
向右/向左 :
這些都是在上一節學過的編程 , 需要注意的地方只有 receivedNumber 有沒有出錯 ,
以及 gamer:bit 按鍵跟小車做的動作相不相對應。
轉右 (按下 gamer:bit X制)
由於 gamer:bit 的按鈕有限 , 我們只能用 Y 制代表向右,
向左轉彎的部份我們會利用倒車再向右轉來解決。
同時需把 M3+M4 關上 , 不然它們會依照上個指令繼續運行。
向右斜方向前行駛(東北) | 按下 micro:bit A 的 A
由於 gamer:bit 的按鈕有限 , 我們只能用 micro:bit 的A制代表向右斜方向前行駛,
M1+M4 forward 100 同時需把 M2+M3 關上 , 不然它們會依照上個指令繼續運行。
向左斜方向前行駛(西北) | 按下 micro:bit A 的 B
向後斜方的部份由於按鈕有限 , 我們將不會編寫獨立的編程 ,
將利用轉彎改變方向再利使向前斜方行駛解決這個問題。
整個編程 :
不足之處 :
- gamer:bit 依舊會有按鈕(input)不足的問題
改善方法 :
- 利用文字輸入的模式控制小車