循行者 16 路 × mBlock 5(MakeBlock 版)
循行者 16 路 MakeBlock 版接在 mBot、Ranger、Orion、MegaPi 的 RJ25 連接埠,用 MBC Pro Sensors 擴展 v2 的積木讀值。擴展安裝與各主板可用連接埠請看 MakeBlock 積木擴展。
SPIKEEV3Arduino I2CmBlockMATRIXmicro:bit
注意
2026-10 以前出貨的 MakeBlock 版韌體用的是舊版擴展 v1.0.0(下載頁標「舊版」);新舊積木不相容,請依感應器韌體版本選擇。
接線
感應器 → mBot 插座片 → 主板 RJ25 連接埠(S1 = 主機送、S2 = 主機收)。UART 38400 8N1。
讀值積木
| 積木 | 傳回 | 編號 | 說明 |
|---|---|---|---|
| 循行者 連接埠 [埠] 線的位置 | -16~+16 | 01 |
線在哪一路:−16(最左)~+16(最右),0 = 正中間;站在車後往前看,負 = 線在左(平常 ±15,±16 只在最外側掉線後 200 ms 內) |
| 循行者 連接埠 [埠] 線的細位置 | -100~+100 | 02 |
線位置的細分:−100 ~ +100,0 = 正中間,負 = 線在左(與線位置同號) |
| 循行者 連接埠 [埠] 線寬 | 0~16 路 | 03 |
壓到線的路數 0~16,0 = 找不到線 |
| 循行者 連接埠 [埠] 線段數 | 0~8 | 04 |
看到幾段線:0 丟線、1 一條線、2 以上 = 分岔/十字 |
| 循行者 連接埠 [埠] 壓線位元圖 | 0~65535 bit | 05 |
bit0 = 第 1 路(最左)… bit15 = 第 16 路,1 = 那一路在線上 |
| 循行者 連接埠 [埠] 最後離線方向 | -16~+16 | 06 |
丟線前線最後在哪一側:−16 ~ +16(負 = 左),找回線後維持最後一次 |
| 循行者 連接埠 [埠] 門檻 | 1~99 | 07 |
判斷「在線上」的光值門檻 1~99,預設 40(2026-11-03 以前出貨的韌體是 50);用 E4 改 |
| 循行者 連接埠 [埠] 校準次數 | 0~255 次 | 08 |
開機後完成校準的次數(按鈕校準也算) |
| 循行者 連接埠 [埠] 第 [1~16] 路光值 | 0~100 | 10~1F |
第 1 |
| 循行者 連接埠 [埠] 第 [1~16] 路在線上? | 是/否 | 05 |
壓線位元圖 05 的第 N 個 bit(第 1 路 = bit0,最左):那一路壓到線 = 是 |
命令積木
| 積木 | 編號 | 說明 |
|---|---|---|
| 循行者 連接埠 [埠] 切黑線 | E0 |
追黑線(預設);存 RAM,重開機回預設 |
| 循行者 連接埠 [埠] 切白線 | E1 |
追白線(F3 b1 = 1);存 RAM,重開機回預設 |
| 循行者 連接埠 [埠] 黑色校準 | E2 |
把目前讀值記為黑(感應器壓在黑線上),約 50 ms;寫入 EEPROM(執行中 F3 bit2 = 1) |
| 循行者 連接埠 [埠] 白色校準 | E3 |
把目前讀值記為白(感應器壓在白底上),約 50 ms;寫入 EEPROM(執行中 F3 bit2 = 1) |
| 循行者 連接埠 [埠] 設定門檻 [門檻] | E4 |
二值化門檻 1~99(RAM,重開機回預設 40);SPIKE 參數超出範圍回失敗(狀態 2) |
| 循行者 連接埠 [埠] 5 秒動態校準 | E7 |
5 秒內把感應器在黑線與白底上來回掃,取極值當黑白參考(共識 B-12,= v1 的 0x20=0x01);期間 F3 b2 = 1(執行中 F3 bit2 = 1) |
| 循行者 連接埠 [埠] 更新全部數值 | FD |
一次讀整張值表進快取(FD 整包);接下來 10 ms 內的讀值積木直接用快取,不再逐一詢問 |
狀態積木
擴展把 F3 各 bit 拆成布林積木:
| bit | 名稱 | 說明 |
|---|---|---|
| b0 | 就緒 (ready) |
恆 1 |
| b1 | 白線模式 (whiteMode) |
1 = 正在追白線 |
| b2 | 校準中 (calibrating) |
E2/E3/E7 執行中;此時拒收新的校準命令 |
| b3 | 丟線 (lost) |
線段數 = 0 |
| b4 | 分岔 (fork) |
線段數 ≥ 2 |
| b5 | 左右反向 (reversed) |
E9 = 1(感應器反裝,左右對調) |
封包格式(給自己寫解碼器的人)
| 動作 | 格式 |
|---|---|
| 讀一個值 | 主機送 [編號] → 回 [值低][值高][編號^值低^值高] |
| 寫入命令 | 寫入命令 E0~EE:收齊參數後回 [00][00][編號] 再執行;20 ms 內沒收齊就丟棄 |
| 不認得的編號 | [00][80][編號^0x80](= -32768) |
| 整包 FD | 送 [FD] → 回 [AA][18][24 個 int16 小端][xor],xor = AA ^ N ^ 所有資料 byte;內容 = 本頁值表由小到大排(不含共用編號與命令)。擴展用它一次抓全部、10 ms 內的積木直接讀快取。 |
| 共用編號 | F0 裝置 ID、F1 協議版本、F2 韌體版本、F3 狀態旗標 |
本頁依據與假設
本頁由 _build/gen-reference.mjs 從 _build/protocol/line16.json(單一真相來源,轉錄自 2026-10-21 協定定案)產生。
- B-11:細位置 02 與線位置 01 同號(負 = 左);韌體 F16:1290 註解寫反,程式碼同號(IR:11 為準)。
- B-12:E7 五秒動態校準補回(v1 的 0x20=0x01),定案表沒列。
- EV3:模式 0~2 鎖住;模式 3 原本不送 → 16 bit 位元圖;模式 4 原本不送 → 同模式 2;模式 5 ID 格式 B(共用函式)。
- SPIKE:0/5/7/9 鎖住,1
4、6 維持不動;教育版模式 0 的 16 路光值是 2-bit(玩具版 1-bit),跟 8 路的 4-bit 不同;byte 815 補 0(#65 已改,使用者保留);模式 9 排法照盤點(四路 4-bit 一個 int16,v6 = 位元圖);模式 8 v[0] 改 ID|hw[0]<<8。 - 線段數 04 範圍:定案沒寫,16 路最多 8 段(交錯壓線),採 0~8。
- mBlock 舊版:MBC_MBLOCK_LEGACY=1 時逐 byte 同 2026-10-21 統一後韌體(0x01 位置、0x02 線寬、n<<4|03 反向兩路壓一 byte、0x07 細位置 0~200),0x0B 回 1(B-1)。
- Flash:C031 硬體鎖 28 KB,I2C 版餘 848 B;不夠時照 B-17 順序瘦身,JSON 不受影響。
- 積木文字以擴展 v2.0.0 產生器
build_mext.js的表為準;本頁由同一份 JSON 產生。