掌控者 PS4/PS5 × mBlock × mBlock 5

互動教學mBlock

第一次用?先跟著互動教學在網頁上做一遍,再照下面的步驟接主機。

這一頁只講 mBlock 5(MBC Pro Sensors 擴展):在 MakeBlock(mBot)+ mBlock 5 上用它讀掌控者 PS4/PS5的安裝步驟、每個值怎麼讀、能用的命令與範例。要換產品、主機或軟體,用上方的切換列。

要買哪個版本、怎麼接

買 MakeBlock 版(RJ25 接頭),插 mBot/Ranger/Orion/MegaPi 的 RJ25 連接埠;各主板可用哪幾個埠見 MakeBlock 積木擴展。

掌控者 PS4/PS5 × MakeBlock(mBot)+ mBlock 5

安裝與設定

你需要

  • 感應器:掌控者 PS4/PS5(MakeBlock 版,出廠韌體跟其他版本不同),加上 mBot 插座片(接 RJ25 連接埠)。SPIKE、EV3、I2C 版不能直接接 Makeblock 主板。
  • 主板:mBot(mCore)、mBot Ranger(Auriga)、Orion、Ultimate 2.0(MegaPi)、MegaPi Pro。mBot2(CyberPi)沒有 RJ25 連接埠,不支援。
  • 軟體:mBlock 5 電腦版(上傳模式,程式燒進主板執行)。
  • 擴展:MBC Pro Sensors v2.0.0(搭配 2026-10 之後出貨、協定 v2 的韌體)。

安裝軟體

  1. 到 mBlock 官網 安裝 mBlock 5 電腦版。
  2. 打開 mBlock 5,左下「設備」加入你的主板(例如 mBot)。
  3. 右下「模式開關」切到 上傳。

讓軟體認得感應器

要加一個擴展,積木區才會多出 MBC 的積木:

  1. 取得 v2.0.0 擴展:上架後在 mBlock 5「擴展中心」搜尋「MBC」就能加入。上架前(送審中),進階使用者可以到 ext.mblock.cc 登入自己的 Makeblock 帳號 → 我的擴展 → 匯入資料,上傳 mbc_pro_sensors_2.0.0_import.mext(約 1 分鐘),再按「下載」拿到 .mext。
  2. 把 .mext 檔拖進 mBlock 視窗,積木區會多出「循行者」「測距者」「掌控者」「IMU 陀螺儀」「神攝手」「MBC 共用」六個分類。
  3. 用主板的開機起始積木(例如「當 mBot 啟動時」)開始寫程式,按「上傳」燒進主板。
  4. 打開範例:「檔案 → 從電腦打開」選 .mblock 檔。

重要

新版擴展(v2)只能配新版韌體,舊版擴展(v1.0.0)只能配 2026-10 以前的韌體,兩者積木不相容。不確定手上感應器是哪一版:拖進 v2 擴展後用「MBC 共用 → 協議版本」積木讀,回 2 就是新韌體。舊版擴展在 下載專區。

接線

感應器 → mBot 插座片 → 主板的 RJ25 連接埠(UART 38400)。積木上選的是連接埠號碼,擴展會依主板自動換成正確的腳位。

主板 可用連接埠 說明
mBot(mCore) 1、2、3、4 四個埠都可以
mBot Ranger(Auriga) 6 ~ 10 1 ~ 4 是紅色馬達埠、5 是序列埠,不能接
Orion 3、4、6 1、2 是紅色馬達埠;7、8 只能接類比感應器
Ultimate 2.0(MegaPi) 6、7、8 需加裝 RJ25 擴充板;5 是序列埠
MegaPi Pro 7、8、9、10 需加裝 RJ25 擴充板

本頁範例接 mBot 連接埠 1;換埠就把積木上的連接埠數字改掉。換別的主板時,把「當 mBot 啟動時」換成那塊主板的起始積木。

配對手把(第一次用或要換手把)

  1. 接收器接好、主機開機。插上去的時候不要按住接收器上的按鍵(會進入燒錄模式,接收器就不會動作;放開按鍵、拔掉重插就好)。
  2. 第一次使用:接收器還沒記住任何手把時,一開機就會自動開放 30 秒配對(綠燈快速閃)。要換手把、或 30 秒已經過了:按一下接收器上的按鍵(Reset),會清掉舊的手把、重新開放 30 秒。
  3. 在這 30 秒內讓手把進入配對模式,直到手把的燈條快速閃爍:PS4 手把同時長按 SHARE+PS;PS5 手把同時長按 建立(Create)+PS。
  4. 連上之後接收器會記住這支手把,也不會再連別人的手把。之後開機,只要按手把的 PS 鍵就會自動連上。
接收器的綠燈 意思
快速閃 正在等手把配對
一直亮 沒有連上手把(按手把 PS 鍵重新連線)
熄掉 已經連上手把

提示

比賽現場請在自己的位置完成配對,避免 30 秒內有別隊手把也在配對模式。綁錯手把就再按一次 Reset 重新配對。

第一次測試

  1. 程式開頭先「等待 1 秒」讓感應器開機,太早讀會讀到 -32768。
  2. 用「MBC 共用 → 連線正常?」積木確認接線,再看數值。
  3. 上傳本頁範例 1,數字跟著感應器變化,就是接好了。

常見問題

  • 「連線正常?」是否? 連接埠選錯、感應器不是 MakeBlock 版、或韌體是舊版(舊韌體請用 v1 擴展)。
  • 讀到 -32768? 從開機到現在一次都沒讀到:檢查接線;或這款產品沒有這個值。
  • 數值一直不變? 確認插座片插緊、感應器指示燈有亮;「協議版本」積木讀到 2 代表通訊正常。
  • 積木圖是英文? 控制與運算積木(forever、if…then…else、wait、set…to)在中文介面就是「重複無限次」「如果…那麼…否則」「等待…秒」「變數設為」。
  • 還是不行? LINE 聯絡我們,告訴我們主板型號、連接埠和「裝置 ID」積木的讀值。

讀值

裝好 MBC Pro Sensors 擴展後,在「掌控者」分類找積木,連接埠選感應器實際插的孔。

十六鍵 buttons16

十六鍵
範圍 意思
0~65535 bit 全部按鍵一個 16 bit(PSX 排列):bit0 SELECT(SHARE)、1 L3、2 R3、3 START(OPTIONS)、4 上、5 右、6 下、7 左、8 L2、9 R2、10 L1、11 R1、12 ▲、13 ●、14 ✕、15 ■;1 = 按下;未連線 = 0
(掌控者 連接埠 [1 v] 十六鍵 :: sensing)

積木傳回 十六鍵(0~65535 bit)。主機送 [01] → 回 [值低][值高][01 ^ 值低 ^ 值高],值 = int16 小端。

方向鍵 dpad

方向鍵
範圍 意思
0~15 bit 上 1、右 2、下 4、左 8,同時按相加(0~15)
(掌控者 連接埠 [1 v] 方向鍵 :: sensing)

積木傳回 方向鍵(0~15 bit)。主機送 [02] → 回 [值低][值高][02 ^ 值低 ^ 值高],值 = int16 小端。

形狀鍵 shapeKeys

形狀鍵
範圍 意思
0~15 bit ▲ 1、● 2、✕ 4、■ 8,同時按相加(0~15)
(掌控者 連接埠 [1 v] 形狀鍵 :: sensing)

積木傳回 形狀鍵(0~15 bit)。主機送 [03] → 回 [值低][值高][03 ^ 值低 ^ 值高],值 = int16 小端。

肩鍵 shoulderKeys

肩鍵
範圍 意思
0~15 bit L2 1、R2 2、L1 4、R1 8,同時按相加(0~15)
(掌控者 連接埠 [1 v] 肩鍵 :: sensing)

積木傳回 肩鍵(0~15 bit)。主機送 [04] → 回 [值低][值高][04 ^ 值低 ^ 值高],值 = int16 小端。

功能鍵 funcKeys

功能鍵
範圍 意思
0~15 bit SELECT(SHARE) 1、L3 2、R3 4、START(OPTIONS) 8,同時按相加(0~15)
(掌控者 連接埠 [1 v] 功能鍵 :: sensing)

積木傳回 功能鍵(0~15 bit)。主機送 [05] → 回 [值低][值高][05 ^ 值低 ^ 值高],值 = int16 小端。

已連線 connected

範圍 意思
0~1 1 = 手把已連線且 300 ms 內有資料,0 = 未連線(斷線時按鍵 0、搖桿中間)
(掌控者 連接埠 [1 v] 手把已連線? :: sensing)

積木傳回 已連線(0~1)。主機送 [06] → 回 [值低][值高][06 ^ 值低 ^ 值高],值 = int16 小端。

電量 battery

電量
範圍 意思
0~100 % 手把電量 0~100(PS2 接收器恆 0)
(掌控者 連接埠 [1 v] 電量 :: sensing)

積木傳回 電量(0~100 %)。主機送 [07] → 回 [值低][值高][07 ^ 值低 ^ 值高],值 = int16 小端。

L2 類比 l2Analog

L2 類比
範圍 意思
0~255 L2 扳機壓多深 0~255(未連線 0)
(掌控者 連接埠 [1 v] L2 類比 :: sensing)

積木傳回 L2 類比(0~255)。主機送 [08] → 回 [值低][值高][08 ^ 值低 ^ 值高],值 = int16 小端。

R2 類比 r2Analog

R2 類比
範圍 意思
0~255 R2 扳機壓多深 0~255(未連線 0)
(掌控者 連接埠 [1 v] R2 類比 :: sensing)

積木傳回 R2 類比(0~255)。主機送 [09] → 回 [值低][值高][09 ^ 值低 ^ 值高],值 = int16 小端。

系統鍵 sysKeys

系統鍵
範圍 意思
0~3 bit b0 PS 鍵、b1 擷取(PS5 靜音)鍵;未連線 0(PS2 恆 0)
(掌控者 連接埠 [1 v] 系統鍵 :: sensing)

積木傳回 系統鍵(0~3 bit)。主機送 [0A] → 回 [值低][值高][0A ^ 值低 ^ 值高],值 = int16 小端。

手把類型 padType

範圍 意思
0~4 0 無、1 PS2 數位、2 PS2 類比、3 PS4、4 PS5(或其他)
(掌控者 連接埠 [1 v] 手把類型 :: sensing)

積木傳回 手把類型(0~4)。主機送 [0B] → 回 [值低][值高][0B ^ 值低 ^ 值高],值 = int16 小端。

搖桿 1~4 軸 stick

搖桿 1~4 軸
範圍 意思
-100~+100 10 LX、11 LY、12 RX、13 RY:−100 ~ +100,0 = 中間,右/上為正;未連線 0
(掌控者 連接埠 [1 v] 搖桿 [軸] :: sensing)

積木傳回 搖桿 1~4 軸(-100~+100)。主機送 [10] → 回 [值低][值高][10 ^ 值低 ^ 值高],值 = int16 小端;第 N 路的編號 = 0x10 + (N − 1)。

[按鈕] 被按下? pressed

範圍 意思
是/否 從十六鍵 01 拆出的單一按鈕(PSX 排列),選單:✕ ● ▲ ■ 上 下 左 右 L1 R1 L2 R2 L3 R3 SELECT START
<掌控者 連接埠 [1 v] [■ v] 被按下? :: sensing>

命令

震動 rumble

[強度 0~255],0 = 停;每次 200 ms(PS2 收到忽略)

掌控者 連接埠 [1 v] 震動 (128) :: sensing

主機送 [E5][參數…] → 感應器回 [00][00][E5](收到了)再執行。

燈條顏色 lightbar

[R][G][B] 各 0~255,要剛好 3 byte;未連線先記住,連上再套用;預設藍 (0,0,255)(PS2 收到忽略)

掌控者 連接埠 [1 v] 燈條顏色 (128) (128) (128) :: sensing

主機送 [E6][參數…] → 感應器回 [00][00][E6](收到了)再執行。

更新全部數值 readAll

一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問

掌控者 連接埠 [1 v] 更新全部數值 :: sensing

範例

這一頁是寫給完全沒寫過程式的人:用 mBlock 5 的積木在 mBot 上讀掌控者 PS4/PS5。5 個範例從「把數字變成聲音」開始,一步一步做到會自己跑的車子。每個範例都有積木圖、可下載的專案檔,還有一支做同樣事情的 Arduino 程式。

寫法 適合誰 怎麼打開範例檔
🟧 mBlock 5 電腦版(積木,上傳模式)+ MBC 感應器擴展 v2 學校、第一次用 mBot 的人 下載 .mblock → 打開 mBlock 5 → 「檔案 → 從電腦打開」→ 選檔案 → 右下切到「上傳」→ 按「上傳」
🔧 Arduino IDE(文字程式) 想看積木背後長什麼樣、或自己寫程式的人 下載 .ino → 裝好 Makeblock 與 MBC_Sensors 函式庫(見 MakeBlock 積木擴展)→ 主板選 Arduino Uno → 上傳

重要

  • 感應器要是 MakeBlock 版、2026-10 之後的協定 v2 韌體,經 mBot 插座片接 RJ25 連接埠;擴展要用 v2.0.0(舊韌體配舊版 v1 擴展,兩者不能混用)。
  • 主板是 mBot(mCore)。mBot Ranger、Orion、MegaPi 也能用,但要把「當 mBot 啟動時」換成那塊主板的起始積木、連接埠改成它能用的號碼(見 支援的主板與連接埠);mBot2(CyberPi)沒有 RJ25,不支援。
  • 積木圖裡的控制與運算積木(forever、if…then…else、wait、set…to)以英文顯示,在 mBlock 的中文介面就是「重複無限次」「如果…那麼…否則」「等待…秒」「變數設為」。

開始之前

掌控者 PS4/PS5 × mBot 接線

感應器 → mBot 插座片 → 主板 RJ25 連接埠(S1 = 主機送、S2 = 主機收,UART 38400)。

  1. 裝擴展:到 MakeBlock 積木擴展 取得 MBC Pro Sensors v2.0.0 的 .mext,拖進 mBlock 5 視窗;左下「設備」加入 mBot,右下切到「上傳」。
  2. 接線:掌控者 → mBot 插座片 → mBot 連接埠 4(這頁所有範例都接這一埠;換埠就把積木上的連接埠數字改掉)。
  3. 先開機再讀:每個範例一開始都「等待 1 秒」讓感應器開機;太早讀會讀到 -32768(還沒收到)。
  4. 配對手把(只要做一次):接收器插好、mBot 開機,插上去時不要按住接收器上的按鍵。第一次使用會自動開放 30 秒配對(綠燈快速閃);要換手把就按一下接收器的按鍵(Reset)重新開放 30 秒。這 30 秒內 PS4 手把同時長按 SHARE+PS、PS5 手把長按 建立+PS,直到燈條快閃。連上後接收器會記住這支手把,之後按 PS 鍵就自動連線。
  5. 接收器綠燈:快速閃=等配對、一直亮=沒連上(按手把 PS 鍵)、熄掉=已連上。怎麼知道連好了? 跑範例 5:連上亮綠燈。

這頁會用到的積木

每顆讀值積木就是感應器值表裡的一個「值編號」(跟 Arduino I2C 版的暫存器編號相同);完整積木表在 MakeBlock 積木擴展。

積木 傳回 意思
掌控者 連接埠 [4] 搖桿 [左搖桿 x/左搖桿 y/右搖桿 x/右搖桿 y] -100~+100 10 LX、11 LY、12 RX、13 RY:−100 ~ +100,0 = 中間,右/上為正;未連線 0
掌控者 連接埠 [4] [Ⅹ/●/▲/■/上/下/左/右/L1/R1/L2/R2/L3/R3/SELECT/START] 被按下? 是/否 從十六鍵 01 拆出的單一按鈕
掌控者 連接埠 [4] 手把已連線? 是/否 1 = 手把已連線且 300 ms 內有資料,0 = 未連線(斷線時按鍵 0、搖桿中間)

這頁的範例

  1. 搖桿變音高
  2. 按鍵亮燈
  3. 左搖桿控制一個輪子
  4. 方向鍵開車
  5. 雙搖桿坦克車+斷線停車

注意

.mblock 是由產生器照 mBlock 5 的存檔格式產生的,還沒在 mBlock 5 裡開啟驗證(等擴展 v2 上架後補驗)。開不起來或積木顯示空白,請先確認 v2 擴展已拖進 mBlock、設備是 mBot,或照下面的積木圖自己拼(5 分鐘內拼得完);也歡迎 LINE 告訴我們。


範例 1:搖桿變音高

這個範例會做什麼:mBot 沒有螢幕,這個範例把「左搖桿 y」(−100 ~ +100,放開是 0)變成蜂鳴器的音高:往上推音變高、往下拉音變低。先學會「讀到數字」。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • 掌控者 PS4/PS5 藍牙接收器(MakeBlock 版)+手把+ mBot 插座片

怎麼接:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex01_stick_tone.mblock ex01_stick_tone.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  播放音頻 ((440) + ((掌控者 連接埠 [4 v] 搖桿 [左搖桿 y v] :: #2B6CD8) * (3))) 赫茲,持續 (0.1) 秒 :: sound
end
🔧 等價 Arduino 程式(mBot)
// 掌控者 PS4/PS5 × mBlock 5 範例 1:搖桿變音高(mBot 等價 Arduino 程式)
// 接線:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
//   1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
//   2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
//      放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。

#include <MeMCore.h>            // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h>        // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)

MBCPort mbc_port4(4);           // 感應器接在 mBot 連接埠 4
MeDCMotor motorL(9);           // 左輪(M1)
MeDCMotor motorR(10);          // 右輪(M2)
MeRGBLed rgbled(7, 2);         // 板載 RGB LED(2 顆)
MeBuzzer buzzer;               // 板載蜂鳴器

// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
  l = constrain(l, -100, 100); r = constrain(r, -100, 100);
  motorL.run(-l * 255 / 100);
  motorR.run(r * 255 / 100);
}

void setup() {   // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
  mbc_port4.begin();
  delay(1000);   // 等 1 秒讓接收器開機
  while (1) {   // 一直重複
    // 音高 = 440 + 左搖桿 y × 3 赫茲,響 0.1 秒
    buzzer.tone((440 + (mbcReadN(mbc_port4, 0x10, 2, 4) * 3)), 100);
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓接收器開機
  2. 一直重複
    • 音高 = 440 + 左搖桿 y × 3 赫茲,響 0.1 秒

跑起來應該看到什麼:放開搖桿:440 赫茲(La)。往上推到底 740 赫茲、往下拉到底 140 赫茲。手把沒連上時搖桿也是 0,所以也是 440。

常見問題

  • 聽不到聲音? → mBot 的蜂鳴器在主板上,聲音不大;把耳朵靠近,或把 0.1 秒改成 0.3 秒。
  • 想換右搖桿或左右方向? → 把下拉選單換成「右搖桿 y」或「左搖桿 x」。
  • 按鍵、搖桿都沒反應? → 手把沒連上:先跑範例 5 看燈是紅的還是綠的。紅燈=沒連上,重開手把電源(PS4 按 PS 鍵),或 mBot 先開機再插接收器。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 4)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 2:按鍵亮燈

這個範例會做什麼:用「如果…就…否則…」和「被按下?」積木:按 ▲ 綠燈、● 紅燈、Ⅹ 藍燈、■ 粉紅燈(跟手把上符號的顏色一樣),都沒按就關燈。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • 掌控者 PS4/PS5 藍牙接收器(MakeBlock 版)+手把+ mBot 插座片

怎麼接:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex02_button_led.mblock ex02_button_led.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  if <掌控者 連接埠 [4 v] [▲ v] 被按下? :: #2B6CD8> then
    LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (255) 藍 (0) :: looks
  else
    if <掌控者 連接埠 [4 v] [● v] 被按下? :: #2B6CD8> then
      LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (0) :: looks
    else
      if <掌控者 連接埠 [4 v] [Ⅹ v] 被按下? :: #2B6CD8> then
        LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (0) 藍 (255) :: looks
      else
        if <掌控者 連接埠 [4 v] [■ v] 被按下? :: #2B6CD8> then
          LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (255) :: looks
        else
          LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (0) 藍 (0) :: looks
        end
      end
    end
  end
end
🔧 等價 Arduino 程式(mBot)
// 掌控者 PS4/PS5 × mBlock 5 範例 2:按鍵亮燈(mBot 等價 Arduino 程式)
// 接線:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
//   1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
//   2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
//      放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。

#include <MeMCore.h>            // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h>        // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)

MBCPort mbc_port4(4);           // 感應器接在 mBot 連接埠 4
MeDCMotor motorL(9);           // 左輪(M1)
MeDCMotor motorR(10);          // 右輪(M2)
MeRGBLed rgbled(7, 2);         // 板載 RGB LED(2 顆)
MeBuzzer buzzer;               // 板載蜂鳴器

// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
  l = constrain(l, -100, 100); r = constrain(r, -100, 100);
  motorL.run(-l * 255 / 100);
  motorR.run(r * 255 / 100);
}

void setup() {   // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
  mbc_port4.begin();
  delay(1000);   // 等 1 秒讓接收器開機
  while (1) {   // 一直重複
    if (mbcPadPressed(mbc_port4, 12)) {   // 如果 ▲ 被按下
      rgbled.setColor(0, 0, 255, 0); rgbled.show();   // ▲:綠燈
    } else {
      if (mbcPadPressed(mbc_port4, 13)) {   // 否則,如果 ● 被按下
        rgbled.setColor(0, 255, 0, 0); rgbled.show();   // ●:紅燈
      } else {
        if (mbcPadPressed(mbc_port4, 14)) {   // 否則,如果 Ⅹ 被按下
          rgbled.setColor(0, 0, 0, 255); rgbled.show();   // Ⅹ:藍燈
        } else {
          if (mbcPadPressed(mbc_port4, 15)) {   // 否則,如果 ■ 被按下
            rgbled.setColor(0, 255, 0, 255); rgbled.show();   // ■:粉紅燈
          } else {
            rgbled.setColor(0, 0, 0, 0); rgbled.show();   // 都沒按:關燈
          }
        }
      }
    }
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓接收器開機
  2. 一直重複
    • 如果 ▲ 被按下
      • ▲:綠燈
      • 否則:
        • 否則,如果 ● 被按下
          • ●:紅燈
          • 否則:
            • 否則,如果 Ⅹ 被按下
              • Ⅹ:藍燈
              • 否則:
                • 否則,如果 ■ 被按下
                  • ■:粉紅燈
                  • 否則:
                    • 都沒按:關燈

跑起來應該看到什麼:按住 ▲ 綠燈、放開熄掉;同時按 ▲ 和 ● 是綠燈(上面的「如果」先成立就不看下面的)。

常見問題

  • 想用方向鍵或 L1/R1? → 「被按下?」的下拉選單有全部 16 個鍵。
  • 按鍵、搖桿都沒反應? → 手把沒連上:先跑範例 5 看燈是紅的還是綠的。紅燈=沒連上,重開手把電源(PS4 按 PS 鍵),或 mBot 先開機再插接收器。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 4)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 3:左搖桿控制一個輪子

這個範例會做什麼:搖桿的數字 −100 ~ +100 剛好就是馬達動力的範圍,直接把「左搖桿 y」當左輪的動力:推越多轉越快,往下拉就倒轉,放開就停。先把車子架高看。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • 掌控者 PS4/PS5 藍牙接收器(MakeBlock 版)+手把+ mBot 插座片

怎麼接:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex03_stick_one_wheel.mblock ex03_stick_one_wheel.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  左輪動力 (掌控者 連接埠 [4 v] 搖桿 [左搖桿 y v] :: #2B6CD8) %,右輪動力 (0) % :: motion
end
🔧 等價 Arduino 程式(mBot)
// 掌控者 PS4/PS5 × mBlock 5 範例 3:左搖桿控制一個輪子(mBot 等價 Arduino 程式)
// 接線:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
//   1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
//   2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
//      放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。

#include <MeMCore.h>            // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h>        // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)

MBCPort mbc_port4(4);           // 感應器接在 mBot 連接埠 4
MeDCMotor motorL(9);           // 左輪(M1)
MeDCMotor motorR(10);          // 右輪(M2)
MeRGBLed rgbled(7, 2);         // 板載 RGB LED(2 顆)
MeBuzzer buzzer;               // 板載蜂鳴器

// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
  l = constrain(l, -100, 100); r = constrain(r, -100, 100);
  motorL.run(-l * 255 / 100);
  motorR.run(r * 255 / 100);
}

void setup() {   // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
  mbc_port4.begin();
  delay(1000);   // 等 1 秒讓接收器開機
  while (1) {   // 一直重複
    wheels(mbcReadN(mbc_port4, 0x10, 2, 4), 0);   // 左輪動力 = 左搖桿 y(−100 ~ +100),右輪 0
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓接收器開機
  2. 一直重複
    • 左輪動力 = 左搖桿 y(−100 ~ +100),右輪 0

跑起來應該看到什麼:左搖桿往上推,左輪往前轉、越推越快;往下拉倒轉;放開停止。

常見問題

  • 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
  • 按鍵、搖桿都沒反應? → 手把沒連上:先跑範例 5 看燈是紅的還是綠的。紅燈=沒連上,重開手把電源(PS4 按 PS 鍵),或 mBot 先開機再插接收器。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 4)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 4:方向鍵開車

這個範例會做什麼:按住方向鍵車子就往那個方向走,放開就停:上=前進、下=後退、左=原地左轉、右=原地右轉。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • 掌控者 PS4/PS5 藍牙接收器(MakeBlock 版)+手把+ mBot 插座片

怎麼接:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex04_dpad_drive.mblock ex04_dpad_drive.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  if <掌控者 連接埠 [4 v] [上 v] 被按下? :: #2B6CD8> then
    左輪動力 (50) %,右輪動力 (50) % :: motion
  else
    if <掌控者 連接埠 [4 v] [下 v] 被按下? :: #2B6CD8> then
      左輪動力 (-50) %,右輪動力 (-50) % :: motion
    else
      if <掌控者 連接埠 [4 v] [左 v] 被按下? :: #2B6CD8> then
        左輪動力 (-30) %,右輪動力 (30) % :: motion
      else
        if <掌控者 連接埠 [4 v] [右 v] 被按下? :: #2B6CD8> then
          左輪動力 (30) %,右輪動力 (-30) % :: motion
        else
          停止移動 :: motion
        end
      end
    end
  end
end
🔧 等價 Arduino 程式(mBot)
// 掌控者 PS4/PS5 × mBlock 5 範例 4:方向鍵開車(mBot 等價 Arduino 程式)
// 接線:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
//   1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
//   2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
//      放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。

#include <MeMCore.h>            // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h>        // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)

MBCPort mbc_port4(4);           // 感應器接在 mBot 連接埠 4
MeDCMotor motorL(9);           // 左輪(M1)
MeDCMotor motorR(10);          // 右輪(M2)
MeRGBLed rgbled(7, 2);         // 板載 RGB LED(2 顆)
MeBuzzer buzzer;               // 板載蜂鳴器

// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
  l = constrain(l, -100, 100); r = constrain(r, -100, 100);
  motorL.run(-l * 255 / 100);
  motorR.run(r * 255 / 100);
}

void setup() {   // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
  mbc_port4.begin();
  delay(1000);   // 等 1 秒讓接收器開機
  while (1) {   // 一直重複
    if (mbcPadPressed(mbc_port4, 4)) {   // 如果 上 被按下
      wheels(50, 50);   // 上:前進
    } else {
      if (mbcPadPressed(mbc_port4, 6)) {   // 否則,如果 下 被按下
        wheels(-50, -50);   // 下:後退
      } else {
        if (mbcPadPressed(mbc_port4, 7)) {   // 否則,如果 左 被按下
          wheels(-30, 30);   // 左:原地左轉(左輪往後、右輪往前)
        } else {
          if (mbcPadPressed(mbc_port4, 5)) {   // 否則,如果 右 被按下
            wheels(30, -30);   // 右:原地右轉
          } else {
            wheels(0, 0);   // 都沒按:停車
          }
        }
      }
    }
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓接收器開機
  2. 一直重複
    • 如果 上 被按下
      • 上:前進
      • 否則:
        • 否則,如果 下 被按下
          • 下:後退
          • 否則:
            • 否則,如果 左 被按下
              • 左:原地左轉(左輪往後、右輪往前)
              • 否則:
                • 否則,如果 右 被按下
                  • 右:原地右轉
                  • 否則:
                    • 都沒按:停車

跑起來應該看到什麼:按住上,車子往前走;放開,車子停。

常見問題

  • 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
  • 手把沒電或走太遠? → 接收器超過 0.3 秒收不到手把,就把按鍵全部放開、搖桿回到中間,車子會自己停。
  • 按鍵、搖桿都沒反應? → 手把沒連上:先跑範例 5 看燈是紅的還是綠的。紅燈=沒連上,重開手把電源(PS4 按 PS 鍵),或 mBot 先開機再插接收器。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 4)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

範例 5:雙搖桿坦克車+斷線停車

這個範例會做什麼:像開坦克:左搖桿管左輪、右搖桿管右輪,數字 × 0.7 當動力(最快 70)。先用「手把已連線?」判斷:連上亮綠燈才開,沒連上停車亮紅燈。

要準備什麼

  • mBot(mCore 主板)+ mBlock 5 電腦版
  • mBot 兩輪小車(左輪接 M1、右輪接 M2,出廠就是這樣接)
  • 掌控者 PS4/PS5 藍牙接收器(MakeBlock 版)+手把+ mBot 插座片

怎麼接:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。

下載程式

mBlock 5 專案 等價 Arduino 程式
ex05_tank.mblock ex05_tank.ino
mBlock 積木(照著拼就好)
當 mBot 啟動時 :: events hat
wait (1) seconds
forever
  if <掌控者 連接埠 [4 v] 手把已連線? :: #2B6CD8> then
    LED 燈位置 [全部 v] 的三原色數值為 紅 (0) 綠 (255) 藍 (0) :: looks
    左輪動力 ((掌控者 連接埠 [4 v] 搖桿 [左搖桿 y v] :: #2B6CD8) * (0.7)) %,右輪動力 ((掌控者 連接埠 [4 v] 搖桿 [右搖桿 y v] :: #2B6CD8) * (0.7)) % :: motion
  else
    LED 燈位置 [全部 v] 的三原色數值為 紅 (255) 綠 (0) 藍 (0) :: looks
    停止移動 :: motion
  end
end
🔧 等價 Arduino 程式(mBot)
// 掌控者 PS4/PS5 × mBlock 5 範例 5:雙搖桿坦克車+斷線停車(mBot 等價 Arduino 程式)
// 接線:藍牙接收器 → mBot 插座片 → mBot 連接埠 4。第一次使用先照「開始之前」配對手把;之後按手把的 PS 鍵就會自動連上。
// 跟 mBlock 積木範例做的事完全一樣,給想看「積木背後長什麼樣」或用 Arduino IDE 的人。
// 需要的函式庫:
//   1. Makeblock(Arduino IDE「函式庫管理員」搜尋 Makeblock,或 mBlock 5 安裝資料夾裡的 Makeblock 函式庫)
//   2. MBC_Sensors v2:擴展 .mext 解壓後的 src/ 四個檔(MBC_Sensors.h/.cpp、mbc_proto.h、mbc_ids.h),
//      放進 文件/Arduino/libraries/MBC_Sensors/ 就能 #include <MBC_Sensors.h>(https://mbc-pro-sensors.github.io/makeblock.html)
// 主板選 Arduino Uno(mBot 的 mCore 就是 Uno),上傳後拔掉 USB 用電池跑。

#include <MeMCore.h>            // mBot(mCore):馬達、LED、蜂鳴器
#include <SoftwareSerial.h>
#include <MBC_Sensors.h>        // MBC 感應器 v2(跟 mBlock 擴展同一份函式庫)

MBCPort mbc_port4(4);           // 感應器接在 mBot 連接埠 4
MeDCMotor motorL(9);           // 左輪(M1)
MeDCMotor motorR(10);          // 右輪(M2)
MeRGBLed rgbled(7, 2);         // 板載 RGB LED(2 顆)
MeBuzzer buzzer;               // 板載蜂鳴器

// 左/右輪動力 -100~100(正 = 往前):mBot 的左輪裝反,所以 M1 給負的;% 換算成 PWM 0~255
void wheels(int l, int r) {
  l = constrain(l, -100, 100); r = constrain(r, -100, 100);
  motorL.run(-l * 255 / 100);
  motorR.run(r * 255 / 100);
}

void setup() {   // 跟 mBlock 產生的程式一樣,積木全部在 setup() 裡跑
  mbc_port4.begin();
  delay(1000);   // 等 1 秒讓接收器開機
  while (1) {   // 一直重複
    if ((mbcRead(mbc_port4, 0x06) == 1)) {   // 如果手把已連線
      rgbled.setColor(0, 0, 255, 0); rgbled.show();   // 連上了:綠燈
      // 左輪 = 左搖桿 y × 0.7、右輪 = 右搖桿 y × 0.7
      wheels((mbcReadN(mbc_port4, 0x10, 2, 4) * 0.7), (mbcReadN(mbc_port4, 0x10, 4, 4) * 0.7));
    } else {
      rgbled.setColor(0, 255, 0, 0); rgbled.show();   // 沒連上:紅燈
      wheels(0, 0);   // 停車
    }
  }
}

void loop() {}   // 這裡什麼都沒有:上面的積木不會結束

一步一步看懂程式

  1. 等 1 秒讓接收器開機
  2. 一直重複
    • 如果手把已連線
      • 連上了:綠燈
      • 左輪 = 左搖桿 y × 0.7、右輪 = 右搖桿 y × 0.7
      • 否則:
        • 沒連上:紅燈
        • 停車

跑起來應該看到什麼:手把連上亮綠燈;兩支搖桿一起往前推車子前進,推越多越快;左前右後原地右轉;關掉手把馬上停車、亮紅燈。

常見問題

  • 太快不好控制? → 把 0.7 改成 0.5。
  • 車子往反方向轉、越修越歪? → 左右輪的「+」「-」對調(或把左輪、右輪的動力互換)。mBot 出廠左輪 M1、右輪 M2,自己接線的請確認。
  • 按鍵、搖桿都沒反應? → 手把沒連上:先跑範例 5 看燈是紅的還是綠的。紅燈=沒連上,重開手把電源(PS4 按 PS 鍵),或 mBot 先開機再插接收器。
  • 什麼都沒反應、或讀值一直是 -32768? → 連接埠選錯(這頁都接連接埠 4)、插座片沒插緊、或感應器不是 MakeBlock 版。先用「MBC 共用 → 連線正常?」積木確認;「協議版本」讀到 2 才是新韌體(舊韌體請改用舊版擴展 v1)。
  • 上傳失敗、或積木是空白的? → 確認右下角切到「上傳」模式、擴展 v2 已拖進 mBlock、USB 線接的是 mBot 主板。

下一步

其他問題

  • 積木一直回 0? 確認積木選的連接埠跟實際插的一樣,並且已經用「上傳」模式把程式燒進主板。
  • 舊的擴展還能用嗎? 2026-10 以前出貨的感應器用舊版擴展 v1.0.0;新舊積木不相容,依韌體版本選。

還有問題?到 聯絡我們 附上你用的軟體和程式截圖。

下載

本頁依據

  • 主機與軟體清單:_build/guides.json
  • 值與命令:_build/protocol/ps4.json(單一真相來源)
  • 安裝與設定:_build/guides/software/mblock-mblock5.zh.md、_build/guides/product/ps4/mblock-mblock5.zh.md
  • 範例:sensors/ps4/mblock-examples.md
LINE 詢價選購指南