修改 MCU 端程式,讓 D2 LED 成為智慧路口 Edge Box 的第一個號誌輸出。
上一篇建立 Edge Box 的完整目錄,MCU、Python 與網頁檔案都有固定位置,我們今天要開始進入現場控制,修改 sketch/sketch.ino,執行時若看到 D2 腳位的 LED 持續亮起,便代表 MCU 已能直接控制一個數位輸出,今天目標是確認腳位宣告、輸出模式與高低電位可以正確合作,後續功能都將會建立在這個基礎上。

本篇使用 UNO Q、紅色 LED、220Ω 電阻、麵包板與杜邦線,LED 接到 D2 與 GND,電阻用來限制流過 LED 的電流,LED 具有方向性,執行程式後完全沒有反應時,先檢查腳位是否接在 D2、LED 方向是否正確、電阻與 GND 是否確實連接,再回到 App Lab 查看建置是否成功。
程式第一行使用 const int LED_PIN = 2;,將名稱 LED_PIN 對應到數位腳位 D2,腳位名稱集中在程式開頭可增加程式可讀性,const 表示這個值在程式執行期間不會改變,其實若直接在 pinMode() 與 digitalWrite() 內填入數字 2 也能執行,但程式變長後很難判斷這個數字代表腳位、時間或其他設定,使用 LED_PIN 不僅名稱清楚並且也能降低未來修改時漏掉某一處數字的風險。
將 Day 3 的空白 Sketch 改成以下內容,其他專案檔案保持不變。
const int LED_PIN = 2;
void setup() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
}
void loop() {
}
setup() 會在 MCU 啟動時執行一次,pinMode(LED_PIN, OUTPUT) 將 D2 設為輸出模式,表示這個腳位要由程式送出電位控制外部元件,沒有設定為 OUTPUT ,腳位便會呈現高阻抗狀態(High-impedance),無法主動輸出 3.3V 電壓或提供足夠電流來驅動腳位。
digitalWrite(LED_PIN, HIGH) 將 D2 輸出設為高電位,依本篇接線方式,LED 會亮起,若改成 LOW,輸出回到低電位,LED 便會熄滅,digitalWrite() 的功能就是指定某個數位輸出腳位要使用 HIGH 或 LOW。
loop() 目前維持空白,因為今天只需要在啟動時設定一次輸出,LED 亮起後,MCU 會保持 D2 的輸出狀態,不需要在迴圈中反覆執行相同命令。
Arduino 程式必須保留 setup() 與 loop(),前者適合放置啟動時只做一次的設定,後者則會在啟動後持續重複執行,今天讓 loop() 留空,程式行為會比較容易確認。
儲存程式後按下 Run,等待 App Lab 完成建置與部署,D2 LED 應在程式啟動後持續亮起,這代表 LED_PIN 已正確指向 D2,pinMode() 已完成輸出設定,digitalWrite() 也成功送出 HIGH。
測試 HIGH 與 LOW 時,只需暫時將程式中的 HIGH 改成 LOW 後再次執行,確認 LED 熄滅後再改回本篇版本,先不要在今天加入延遲或閃爍流程,避免把固定輸出與其它功能混在一起。測試時至少要完成亮與滅兩種結果,只有亮燈成功仍無法確認 LOW 是否有效,若兩次都能符合預期,便能確定 D2 接線、輸出模式與數位寫入都能正常運作,後面加入狀態切換時才有可靠的硬體基礎。
若程式無法編譯,先確認括號、分號與大小寫,若建置成功但 LED 不亮,依序檢查 D2 接線、LED 方向、電阻與 GND 等實體接線。
LED_PIN 固定表示 D2。點亮 LED,代表我們已跨出第一步,但當它同時接收來自現場按鈕與遠端系統的指令時,若缺乏統一管理,就可能出現狀態不同步,甚至沒人知道它此刻究竟是亮還是滅,下一步就是建立一套清楚的狀態管理方式。
下一篇|如何管理號誌燈