MBC 掌控者 PS2/PS4 接收器 × micro:bit(MakeCode)

三個步驟用 micro:bit 讀手把

在 MakeCode for micro:bit 上,先加入 MBC 擴充,再在「當啟動時」等接收器就緒,最後把讀按鍵、搖桿的積木放進「重複無限次」。PS2 和 PS4 接收器用同一組積木。左邊一步一步做,右邊的積木會跟著長出來;這些積木圖是用 MakeCode 自己的渲染器畫的,跟你在編輯器看到的一樣。右上角可以切到 JavaScript,跟 MakeCode 右上的切換一樣。

MakeCode 免費、免登入,用 Chrome 或 Edge 打開就能寫;程式按「下載」存成 .hex,拖進 micro:bit 就會跑。

1

加入 MBC 擴充、接好線

micro:bit 本來不認得掌控者。加入 MBC 擴充後,積木區會多一個「MBC 感應器」分類,手把的積木都在「掌控者」那一組。先選你的 micro:bit 版本和接收器,下面的硬體關卡會跟著換。

你的 micro:bit 是哪一版?(背面有寫 V2 的就是 V2)
你用哪一種接收器?
  1. 打開 MakeCode,按「新專案」。
  2. 積木區最下面點「進階」→「擴充功能」。
  3. 搜尋框貼上 https://github.com/contactmbcrobot/pxt-mbc-sensors,按 Enter,點 mbc-sensors。
  4. 要中文積木:右上齒輪 →「Language」→ 繁體中文。
  5. 手把先和接收器配對好(接收器的燈會告訴你有沒有連上)。
2

當啟動時:等接收器就緒

接收器開機要一點時間。程式一開始先等它準備好:有接好就打勾,沒接好就打叉。打勾只代表接收器接好了;手把有沒有連上,要用「掌控者 手把已連線?」看。

感應器的 I2C 位址
  1. 從「邏輯」拖「如果…那麼…否則」放進「當啟動時」。
  2. 從「MBC 感應器」→「更多」拖「等位址 … 的裝置就緒,最多 … 毫秒」放進條件,位址選 66(0x42)、填 3000。
  3. 從「基本」拖兩個「顯示 圖示」,一個選打勾、一個選打叉。
  4. 「重複無限次」裡先放「暫停 100 毫秒」。

3

使用按鍵、搖桿積木

「MBC 感應器 → 掌控者」有按鍵、搖桿、扳機、手把狀態、事件,還有 PS4 才有的電量、震動、燈條;「裝置」組是每款 MBC 感應器都有的共用積木。點一個功能,積木和輸出會換成它的範例。

模擬手把:點按鍵、拖動搖桿,看右邊的輸出怎麼變

模擬畫面是示意:點一下按鍵=按住,再點一下放開;拖動搖桿的圓點改變位置(放開滑鼠會停在那裡,按「全部放開」回到中間)。搖桿 −100 ~ +100,0 = 中間,往右、往上是正數。PS4 手把的電量固定示意為 80。PS 鍵和擷取鍵只有選 PS4/PS5 時才出現。

每顆積木的範例

掌控者組和裝置組的積木,每顆都有一組可以照著拼的範例(位址 0x42)。「PS4 才有」那一組,PS2 接收器讀到 0、命令會被忽略。按「試試看」會切到第 3 步,右邊的積木和輸出會換成這個範例。

使用注意

  1. 拔線不會讓程式停:接收器讀不到時,讀值積木回 0(是/否積木回「否」),也不會印任何訊息。搖桿 0 剛好是「中間」,所以拔線時車子會停住、不會亂衝;要分清楚是「沒推搖桿」還是「沒接好」,用「位址 … 的裝置就緒?」。
  2. 手把沒連線時:接收器還在,按鍵全部是 0、搖桿回到中間(0),「掌控者 手把已連線?」=否。
  3. 方向:搖桿往右、往上是正數,−100 ~ +100,0 = 中間。16 顆按鍵用 PSX 排列(十六鍵位元圖的 bit0 是 SELECT,bit14 是 ✕)。
  4. PS4 才有:電量、PS 鍵/擷取鍵、震動、燈條。PS2 接收器電量和系統鍵一直是 0,震動和燈條命令會被忽略。PS5 手把配 PS4 接收器,手把類型讀到 4。
  5. PS2 和 PS4 接收器都是 0x42:同一組 P19/P20 要接兩個,先用「把位址 … 的裝置 改成位址 …」改掉其中一個,第 2 步再選「改過的位址」。
  6. JavaScript 進階:mbc.readValue(66, 0x01) 可以直接讀任何一個 I2C 值(沒接好回 −32768),mbc.writeCmd(66, 0xE5, [200]) 送命令;編號看產品網站的 I2C 指令參考。