Semorphe

閃一顆燈

讓一塊板子上的燈亮起來,然後熄掉。 · ⏱ 約 25 分鐘

你會學到三件事

  1. Arduino 的程式沒有 main,而是 setuploop
  2. 一支腳位要先說「它是輸出還是輸入」
  3. delay 讓程式停在那裡等

開始之前

⚠️ 這一課要先選板子。 右下角的目標選 Arduino Uno(或你手上那一塊)。

選「Arduino」而不指定板子的話,LED_BUILTIN 這個名字會是未知的—— 因為「板子上內建的燈接在哪一支腳」是每塊板子各自不同的事 (Uno 是 13 號腳,ESP32 是 2 號)。

一、兩個特別的函式

void setup() {
}

void loop() {
}

Arduino 的程式沒有 main。取而代之的是兩個:

什麼時候跑
setup() 開機時跑一次——用來準備
loop() 跑完之後從頭再跑一次,永遠——用來做事

void 是上一階段學過的:它不交出任何值

loop 就是一個永遠不會停的迴圈,而它是別人幫你寫好的。 你只要填裡面那一段。

二、先說這支腳要做什麼

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
}

pinMode(哪一支腳, 做什麼)

意思
OUTPUT 這支腳要送電出去(點燈、轉馬達)
INPUT 這支腳要讀進來(按鈕、感測器)

⚠️ 忘了 pinMode 的話,燈可能微微亮或完全不亮,而程式不會報錯。 這是硬體最麻煩的地方:它不當機,它只是行為不對。

LED_BUILTIN 是板子幫你取好的名字,意思是「板子上那顆內建的燈」。

三、亮、等、暗、等

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
}
意思
digitalWrite(腳, HIGH) 送電出去 →
digitalWrite(腳, LOW) 不送電 →
delay(1000) 停在這裡 1000 毫秒(= 1 秒)

⚠️ 沒有 delay 的話,燈會一秒亮暗幾萬次——看起來就是一直亮著。 不是程式錯了,是快到眼睛跟不上。

loop 跑完最後一行會從第一行重來,所以它會一直閃。

完成的樣子

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(1000);
    digitalWrite(LED_BUILTIN, LOW);
    delay(1000);
}

換你了

改成「亮 0.1 秒、暗 0.9 秒」——像心跳那樣。

再試試把兩個 delay 都改成 10,看看會發生什麼。

這一課你做了什麼

如果卡住了

你看到 多半是因為
LED_BUILTIN 說沒宣告 目標選成「Arduino」了,要選一塊具體的板子
燈一直亮著不閃 delay 太短,或忘了寫
燈完全不亮 setup 裡的 pinMode 漏了
燈很暗 pinMode 漏了——腳位在一個「半吊子」的狀態
在編輯器打開這一課 →