EV3 clev3r (BASIC)
+
警告
請注意:您目前觀看的是 【EV3 clev3r (BASIC)】 環境的教學。 如果您使用的是 SPIKE 或是其他 EV3 軟體,請點擊上方按鈕回到主機選單重新選擇。
適用於 clev3r v1.7.1.0(EV3 的 BASIC 語言開發環境)。在此環境下,循行者 16 路感應器會被樂高系統完美識別為官方的 Infrared Sensor(紅外線感應器)。
重要
EV3 硬體重要通訊延遲警告 由於樂高原廠 EV3 主機的硬體通訊機制限制,當程式在不同積木模式(例如從 Proximity 切換至 Remote)進行切換讀取時,主機會產生約 0.5 秒的物理通訊等待延遲,這在高速比賽中可能導致車體失控。 強烈建議:請依據您的任務需求(例如:只用 Remote 進行 PID 循線),在程式一開始選定一種積木,整趟任務請勿中途切換讀取種類!
與官方 EV3 軟體的差異 clev3r 使用 BASIC 語法,但感應器讀取模式與官方 EV3 軟體完全一樣:Proximity / Beacon / Remote 三種模式,回傳數值範圍也完全相同。你可以用 BASIC 的
IR_PROXIMITY/IR_BEACON/IR_REMOTE等指令讀取。
讀取線位置 — Proximity 模式
使用 BASIC 指令讀取 Proximity 模式數值。
| 回傳值 | 範圍 | 說明 |
|---|---|---|
| 線位置 | -16 ~ +16 |
👉 0 = 黑線在正中央,負數偏左,正數偏右;±16 表示線在感應器最邊緣。
|
讀取 16 路光電反射值 — Beacon 模式
使用 BASIC 指令讀取 Beacon 模式數值列表(8 bytes)。
| Byte | 內容 | 範圍 | 解碼方式 |
|---|---|---|---|
| 0 | 光電反射值0 + 1 | 11 ~ 99 | 十位數=通道0,個位數=通道1 |
| 1 | 光電反射值2 + 3 | 11 ~ 99 | 十位數=通道2,個位數=通道3 |
| 2 | 光電反射值4 + 5 | 11 ~ 99 | 十位數=通道4,個位數=通道5 |
| 3 | 光電反射值6 + 7 | 11 ~ 99 | 十位數=通道6,個位數=通道7 |
| 4 | 光電反射值8 + 9 | 11 ~ 99 | 十位數=通道8,個位數=通道9 |
| 5 | 光電反射值10 + 11 | 11 ~ 99 | 十位數=通道10,個位數=通道11 |
| 6 | 光電反射值12 + 13 | 11 ~ 99 | 十位數=通道12,個位數=通道13 |
| 7 | 光電反射值14 + 15 | 11 ~ 99 | 十位數=通道14,個位數=通道15 |
每路光電反射值已被量化為 1 至 9(1=最暗,9=最亮),兩路合併為一個兩位數(11 至 99)。 👉 解碼範例:若讀取到某個 Byte 數值為
83**,其十位數 (8)** 代表偶數通道(如通道 0)的量化光值,個位數 (3) 代表奇數通道(如通道 1)的量化光值。這能完美避開樂高 EV3 的 100 數值限制!
讀取位置 + 寬度 + 邊界防禦 — Remote 模式 (競技戰術推薦!)
使用感應器積木,選擇 Remote(遙控)模式,讀取 數值列表(4 bytes)。
| Byte | 內容數據 | 數值範圍 | 戰術解讀說明 |
|---|---|---|---|
| Byte 0 | 高解析位置平移 | -100 ~ +100 |
👉 0 代表正中央,負值偏左,正值偏右。超平滑 of PID 誤差輸入首選!
|
| Byte 1 | 特徵線寬 | 0 ~ 16 | 👉 觸發的感測器數量。可用於偵測十字路口或 T 字路口。 |
| Byte 2 | 左邊界實體光值 | 0 ~ 100 |
👉 dataIrCalib[0](第 1 路)最左邊感測器的反射光。0=純黑,100=純白。可用於偵測賽道邊界或分岔。
|
| Byte 3 | 右邊界實體光值 | 0 ~ 100 |
👉 dataIrCalib[15](第 16 路)最右邊感測器的反射光。0=純黑,100=純白。可用於偵測賽道邊界或分岔。
|
戰術防呆技巧:Remote 模式的 Byte 2 與 Byte 3 能讓您在 clev3r (BASIC) 中直接獲得感測器兩側的最邊緣光值。如果兩個數值同時小於 20,表示車頭完全進入十字路口的橫線中;如果其中一邊數值突變,表示即將進入分岔,是防掉線的終極法寶!
範例程式下載
上圖為 16路循線感應器於 EV3 clev3r (BASIC) 中的經典 PID 循線程式結構示範
下載後用 clev3r 開啟即可使用。
EV3 專屬副程式 (Subroutines) 說明
為了讓 EV3 clev3r (BASIC) 的程式撰寫更為簡潔直覺,MBC 16 路循線感應器提供了三個強大的「專屬副程式(Subroutines)」。開發時不需要額外安裝繁瑣的擴充包,只需在主程式中呼叫對應的函數,系統就會自動在背景解析硬體封包,並將最新的感應器數據存入專屬變數中,供馬達控制邏輯直接使用。
以下為三個核心函數的功能與使用時機介紹:
1. 基礎循線函數:LinePos16_dataUpdate
- 功能目的:快速讀取最基礎的 16 段循線位置,適合新手入門教學與基礎左右轉向判斷。
- 參數與回傳值:輸入感應器連接埠(
port),回傳變數pos16。 - 數值解析:範圍落在
-16到+16之間。 - 物理直覺:黑線在左邊為負值、在正中央為 0、在右邊為正值。
2. 競技高精度函數:LinePos100_dataUpdate
- 功能目的:取得高解析度次像素級插值位置,最佳 PID 循線選擇。專為高階 PID / PD 循線控制演算法(適用於各類競速賽事)所設計,能提供極致平滑的修正動力。使用前提是必須確實完成感應器校準,校準越精確數值越準確。
- 參數與回傳值:輸入感應器連接埠(
port),會同步回傳多個關鍵變數:pos100:高精度位置,範圍-100到+100(同樣維持左負右正的標準)。width:即時線寬偵測,數值代表目前觸發的感應器數量(範圍0到16)。可用於精準判斷十字路口、T 型路口或終點停止線。ch1/ch16:同步讀取最左邊 (ch1) 與最右邊 (ch16) 感應器的實體光值(範圍0到100),方便使用者作防掉線或交叉路口等進階策略調整。
3. 全陣列解碼函數:LineCh16_dataUpdate
- 功能目的:將 16 顆感應器徹底解碼為獨立狀態,適用於撰寫自訂的特殊路口判斷演算法、特定位置的感應器觸發監控,或是將感應器狀態直接繪製於 EV3 主機的螢幕畫面上。
- 參數與回傳值:輸入感應器連接埠(
port),副程式會即時解析並回傳陣列light16。您可以透過索引值(light16[0]到light16[15])來取得每一顆感應器的即時量化光值(數值範圍1至9,1=最暗,9=最亮)。
提示
開發小提醒 這三個函數的底層技術,是巧妙利用了 EV3 內建紅外線感應器(設定於 Port 4)的多頻道切換(Channel 1~4)來傳輸大量資料。實際開發時,只要將這些專屬副程式放入「無限迴圈(Loop)」中,即可確保循線車隨時掌握最即時的賽道資訊!
提示
想要學更厲害的循線控制方法嗎? 可以找這幾位厲害的教練上課唷!他們有非常豐富的比賽與教學經驗,保證讓你收穫滿滿~ 💯

