在真正寫出第一個有趣的專案之前,我卻誤碰了一個 Arduino IDE 的「硬規定」——它要求每個專案(在 Arduino 世界裡叫做 sketch)必須放在一個與主程式檔同名的資料夾裡。雖然聽起來有點囉嗦,但這是 IDE 識別專案的方式,絕對不能偷懶把不同專案的檔案混在一起,否則 IDE 會把它們全部一起燒進板子裡。
對於大型或模組化的專案,推薦的結構是:主 .ino 檔只放最精簡的入口(#include、setup()、loop()),實際的函式和類別分別寫在 .h(宣告)和 .cpp(實作)裡。這篇筆記的練習還用不到這個層次,但先建立這個概念對之後會很有幫助。
從內建 LED 開始:最基本的呼吸燈
第一個目標很單純:讓板子內建的 LED 像呼吸一樣緩慢亮起、再慢慢熄滅。
這裡用到的是 PWM(Pulse Width Modulation,脈衝寬度調變)——簡單說,就是透過快速切換開關來模擬「介於全亮和全暗之間」的亮度。analogWrite() 這個函式就是在控制這個數值,NodeMCU(ESP8266)上的 PWM 範圍預設是 0 到 1023。
第一版程式碼很直觀:
| |
但是跑起來之後,第一個感覺是:呼吸太慢了。問了 AI 後算一下原因:
- 一次運行(0 → 1023,每次跳 5):約 205 步
- 每步延遲 30ms
- 總耗時 205 × 30ms ≈ 6.15 秒
後來也注意到另一個問題:方向寫錯了,全亮後不會變暗,反而又暗回去。經過修正後,實現平滑呼吸:
| |
關鍵修正
寫入值越低,LED 越亮(因為 NodeMCU 是低電位觸發)。0 是最亮,1023 是最暗。
為了讓呼吸燈看起來更自然,可以調整每次增減的步長:步長越小,呼吸越平滑但週期越長。