MBC 掌控者 PS2/PS4 × Pybricks

三個步驟用 MicroPython 讀掌控者遙控接收器

寫 Pybricks 程式一定照這個順序:先匯入函式庫,再建立物件、幫接收器取名字,最後才用這個名字去呼叫功能。左邊一步一步做,右邊的程式會跟著長出來;點模擬手把上的按鍵、拖動搖桿,就能看到程式會印出什麼。

你的主機:
1

匯入函式庫

程式的第一件事是告訴 Pybricks「我要用掌控者的函式庫」。沒有這行,後面寫的 MBC_GAMEPAD 主機看不懂,會出現 NameError。

選一種函式庫(兩種寫法完全一樣,只差 import 那一行):

  1. 下載函式庫(存成檔案,檔名不要改):MBC_gamepad.py(只接掌控者)或 MBC_sensors.py(統一函式庫);你選的是 MBC_gamepad.py。
  2. 在 Pybricks Code 左邊檔案區按「Import a file」,把它匯入同一個專案。
  3. 檔名不要改,也不要放進子資料夾。
  4. 回到主程式,在最上面寫下面這幾行(右邊程式標 ① 的地方)。
2

建立物件:幫接收器取名字

一台車可能接好幾個感應器,所以要「建立一個物件」:告訴程式接收器接在哪個孔,並幫它取個名字。之後每次要讀按鍵或搖桿,都是叫這個名字。

接收器接在哪個孔?

要不要開啟多工?

程式裡的 3 就是孔位編號:SPIKE 1~6 = A~F。也可以寫成 Port.C,但要多匯入 from pybricks.parameters import Port。

3

使用功能

寫法都是「pad.功能名稱()」:名字+小數點+功能。要讀按鍵或搖桿,每一圈迴圈先寫一行 pad.update() 讀一次手把,後面的功能才會拿到新的值。點一個功能,程式和輸出會換成它的範例。

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

模擬畫面是示意:點一下按鍵=按住,再點一下放開;拖動搖桿的圓點改變位置(放開滑鼠會停在那裡,按「全部放開」回到中間)。搖桿 1 ~ 9、5 = 中間,往右、往上數字變大。PS4 手把的電量固定示意為 80。

每個功能的範例

14 個功能,每個都有一段可以直接放進迴圈的範例。按「試試看」會切到第 3 步,右邊的程式和輸出會換成這個範例。

完整範例

雙搖桿坦克車(SPIKE,左輪 E、右輪 F)

        

!只改最上面「要改的地方」就好。左搖桿管左輪、右搖桿管右輪;推一點點不會動是「死區」(4 ~ 6 當成中間)。太快不好控制:把 GAIN 調小。推上去卻往後退:把 Direction.COUNTERCLOCKWISE 移到另一顆馬達。

多工寫法(進階)

        

!建立物件時第 2 個參數寫 True,物件要放在 run_task() 外面;每個功能前面都要加 await,update() 也一樣。

跟其他 MBC 感應器一起用

        

!改用統一函式庫:只改 import 那一行,匯入 MBC_sensors.py。兩種函式庫不要同時匯入。

使用注意

  1. 每一圈先 update()。buttons()、pressed()、any_pressed()、stick()、stick_centered()、buttons_psx()、pressed_psx() 讀的都是上一次 update() 拍下的快照。忘了寫 update(),數值會一直停在第一次讀到的樣子,按什麼都不會變。
  2. 拔線不會讓程式停。讀不到時回傳上一次讀到的值,從來沒讀到過就回傳 None,電腦畫面印一行提醒;插回去自動恢復。要知道有沒有接好就用 sensor_ok()。在模擬手把下面勾「拔掉感應器」可以看到這個情形。用搖桿開車時拔線,車子會照最後的搖桿位置繼續開。
  3. 狀態類的功能放在迴圈外,或偶爾讀一次。connected()、battery() 是一組資料,kind()、device_id()、firmware_version() 又是一組,跟按鍵、搖桿不同組;每換一組,接收器要切換一次(SPIKE 多花幾十 ms,EV3 約 0.5 秒)。connected()、battery() 要接收器韌體 2026-10 以後的版本。
  4. 搖桿當開關時用 7 以上、3 以下。只推一點點時,往左、往下很快就變 4,往右、往上要推到一半左右才變 6,兩邊不一樣靈敏。把 4 ~ 6 當成「在中間」,左右兩邊才會一樣好控制。方向:站在車後面往前看,往左、往下是負數(stick_centered()),往右、往上是正數。
  5. 按鍵名稱用大寫字串。例如 pressed('CROSS');PS4/PS5 手把的 SHARE(建立)= 'SELECT'、OPTIONS = 'START',也可以直接寫 'SHARE'、'OPTIONS'。PS 鍵和觸控板讀不到。名稱打錯會出現 ValueError。