Semorphe

閃一顆燈

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

你會學到三件事

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

開始之前

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

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

這個工具會怎麼跟你說話

⚠️ 這一段講一次就好,後面的課不會再提。

你會看到 那是在說
積木上一個琥珀色的虛線框 這一塊這次沒有被跑到——是故意的嗎?
按執行前先問你「猜猜看」 猜完再揭曉——⚠️ 猜錯比猜對值錢,那是你發現自己想錯的地方
主控台說「跟這一課要的不一樣」+兩欄比對 左邊是你印的,右邊是要的
題目那一格的「2/3」 這一課有三題,你過了兩題

🟢 而沒有分數、沒有等級、沒有排名。這個工具只會說那件事怎麼樣了, 不會說你怎麼樣。

🟢 先把編輯器打開,跟著下面一起做。 讀完再打開的話,下面每一段你都得先記起來——而那不是這個工具要你做的事。

到編輯器打開這一課:跟著做

一、兩個特別的函式

每一支 Arduino 程式都長這樣,這兩個框是給你填的:

1void setup() {2}3 4void loop() {5}
定義函式 回傳型別void(無回傳)loop定義函式 回傳型別void(無回傳)setup14

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

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

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

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

二、先說這支腳要做什麼

在 setup 裡宣告那支腳是輸出:

1void setup() {2    pinMode(LED_BUILTIN, OUTPUT);3}
變數LED_BUILTINOUTPUT設定腳位為定義函式 回傳型別void(無回傳)setup12

pinMode(哪一支腳, 做什麼):

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

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

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

📋 它在你這塊板子上是幾號腳?——板子規格 查得到, 而那一頁的每一個數字都附著它抄自上游的哪一個檔。

積木盤上這一顆寫著「設定腳位 … 為 …」。

順帶一提:從下一課起,程式碼裡會出現 // 開頭的字 ——那是寫給人看的,電腦跑到 // 就跳過那一行剩下的部分。 積木盤上那顆叫「備註」(別的地方也叫它「註解」)。

三、亮、等、暗、等

而底下那兩行在積木上是「把腳位 … 設成 …」。

照著打上這一段,它會一直閃:

1void loop() {2    digitalWrite(LED_BUILTIN, HIGH);3    delay(1000);4    digitalWrite(LED_BUILTIN, LOW);5    delay(1000);6}
變數LED_BUILTINHIGH1000變數LED_BUILTINLOW1000等待毫秒把腳位設成等待毫秒把腳位設成定義函式 回傳型別void(無回傳)loop12345
意思
digitalWrite(腳, HIGH) 送電出去 → 亮
digitalWrite(腳, LOW) 不送電 → 暗
delay(1000) 停在這裡 1000 毫秒(= 1 秒)

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

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

完成的樣子

這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。

1void setup() {2    pinMode(LED_BUILTIN, OUTPUT);3}4 5void loop() {6    digitalWrite(LED_BUILTIN, HIGH);7    delay(1000);8    digitalWrite(LED_BUILTIN, LOW);9    delay(1000);10}
變數LED_BUILTINOUTPUT設定腳位為變數LED_BUILTINHIGH1000變數LED_BUILTINLOW1000等待毫秒把腳位設成等待毫秒把腳位設成定義函式 回傳型別void(無回傳)loop定義函式 回傳型別void(無回傳)setup1256789

它們是同一個東西

點一下那塊「等待」積木,程式碼裡 delay(1000); 那一行會亮起來。 再把游標移到 digitalWrite(...),換成另一塊亮。

⚠️ 你不是在學兩種東西。你在看同一支程式的兩種寫法, 而它們永遠是同步的,改哪一邊都算數。

上面那張「同一支程式,兩種看法」就是這件事: 程式碼的每一行都有一個號碼,而那個號碼就印在對應的積木上。

換你了

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

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

到編輯器做這一題:練習:改成像心跳那樣(亮 0.1 秒、暗 0.9 秒)

做一個

摩斯電碼的 SOS 是「短短短 長長長 短短短」。用那顆內建燈打出來,中間要看得出斷句。

🔴 這一題沒有裁判,你自己看那顆燈,判斷它是不是 SOS。 ⚠️ 短、長、字母之間、字之間,四種間隔你要自己定。定得不好別人看不出來。 打給旁邊的人看,問他認不認得出來。

到編輯器做這一題:做一個:用燈打一次 SOS

這一課你做了什麼

如果卡住了

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