學習目標
本章將介紹 Arduino 程式設計的基本觀念,帶你理解程式架構、註解、變數、常數、資料型別、運算子與條件判斷。
這些基礎將用於後續的 LED、按鍵、感測器與其他電子元件控制。
- 了解 Arduino 程式的組成方式。
- 認識變數與常數。
- 學會常見資料型別。
- 理解運算子與條件判斷。
- 為後續控制 LED、按鍵與感測器建立程式基礎。
為什麼要學 Arduino 程式設計?
Arduino 是一塊可以控制電子元件的開發板,但真正決定開發板要執行什麼工作的,是寫入其中的程式。
LED 是否亮起、馬達何時轉動、LCD 顯示什麼文字,以及按下按鍵後要執行什麼動作,全部都由程式決定。
Arduino 使用以 C/C++ 為基礎的程式語言,並由官方提供大量容易使用的函式,因此學習門檻通常比直接學習一般 C++ 更低。
Arduino 程式的基本架構
每支 Arduino 程式至少包含 setup() 與 loop() 兩個函式。
void setup()
{
}
void loop()
{
}
- setup():負責初始化,開發板啟動或重新啟動後只執行一次。
- loop():負責主程式流程,會持續重複執行。
這種結構讓 Arduino 可以持續監控感測器、更新顯示器或控制輸出,因此很適合即時控制應用。
使用註解說明程式
註解不會被 Arduino 執行,其用途是協助自己或其他人理解程式內容。
單行註解
// LED 接在 D13
多行註解
/*
Arduino
Complete Course
*/
建議每完成一段功能,就加入簡短而明確的註解。幾個月後再次閱讀程式時,良好的註解能節省大量理解時間。
變數是什麼?
變數是用來儲存資料的名稱。程式可以透過變數名稱讀取或修改其中的值。
int ledPin = 13;
這行程式建立一個名為 ledPin 的整數變數,並把數值 13 存入其中。之後程式看到 ledPin,就能知道它代表 D13 腳位。
為什麼不要直接寫腳位數字?
直接把腳位數字寫在函式中雖然可以執行,但當程式規模變大或需要更換腳位時,會變得難以閱讀與修改。
digitalWrite(13, HIGH);
較好的做法是先使用有意義的名稱定義腳位,再在程式中統一使用該名稱。
const int LED_PIN = 13;
digitalWrite(LED_PIN, HIGH);
這樣不但能提高程式可讀性,也方便日後更換硬體腳位。
常數的用途
當一個值在程式執行期間不應被改變時,建議使用 const 宣告為常數。
const int buttonPin = 2;
這能讓編譯器與閱讀程式的人清楚知道該值不應被修改,也能降低程式誤改的風險。
Arduino 常見資料型別
資料型別決定變數可以儲存什麼內容。以下整理 Arduino 初學階段常見的資料型別。
| 型別 | 用途 | 範例 |
|---|---|---|
| bool | 真/假 | true、false |
| char | 單一字元 | 'A' |
| int | 整數 | 100 |
| unsigned int | 不含負數的整數 | 500 |
| long | 較大的整數 | 100000 |
| float | 小數 | 25.5 |
| String | 字串 | "Arduino" |
bool:表示真或假
bool 適合表示只有兩種狀態的資料,例如 LED 開或關、按鍵按下或放開,以及 Relay 啟用或停用。
bool ledState = true;
int:儲存整數
int 是 Arduino 程式中最常使用的資料型別之一,可用來儲存感測器讀值、計數值或腳位編號。
int sensorValue;
sensorValue = analogRead(A0);
float:儲存小數
當資料需要保留小數時,可以使用 float。例如 DHT22 溫溼度感測器的溫度值可能包含小數。
float temperature = 26.35;
若改用 int 儲存 26.35,小數部分會遺失,只保留整數部分。
String:儲存文字
String 可以儲存一段文字,並可用於 LCD、OLED 或 Serial 輸出。
String name = "Arduino";
在記憶體較小的 AVR 開發板,例如 Arduino Uno R3 上,String 雖然方便,但大量進行動態字串操作可能造成記憶體碎片。初學階段可以先使用,後續再學習 char 陣列的適用時機。
指派運算子與算術運算子
指派運算子 =
在 Arduino 程式中,單一等號 = 不是數學中的相等,而是把右邊的值存入左邊的變數。
int ledPin = 13;
這行程式的意思是把數值 13 存入 ledPin。
常用算術運算子
| 運算子 | 功能 |
|---|---|
| + | 加法 |
| - | 減法 |
| * | 乘法 |
| / | 除法 |
| % | 取餘數 |
int a = 10;
int b = 3;
Serial.println(a % b);
10 除以 3 的餘數是 1,因此 Serial Monitor 預期會輸出 1。
比較運算子
| 運算子 | 功能 |
|---|---|
| == | 等於 |
| != | 不等於 |
| > | 大於 |
| < | 小於 |
| >= | 大於等於 |
| <= | 小於等於 |
常見錯誤是把 = 與 == 混淆。= 用來指定值,== 才是比較兩個值是否相等。
if (sensorValue > 500)
{
Serial.println("Bright");
}
當 sensorValue 大於 500 時,程式會在 Serial Monitor 顯示 Bright。
使用 if 進行條件判斷
if 可以根據條件是否成立,決定要不要執行某段程式。這是 Arduino 控制按鍵、感測器與輸出裝置時最常使用的語法之一。
if (digitalRead(buttonPin) == LOW)
{
digitalWrite(LED_PIN, HIGH);
}
這段程式表示:如果讀取到的按鍵狀態是 LOW,就把 LED_PIN 設為 HIGH,讓 LED 亮起。
實際按鍵是否在按下時呈現 LOW,仍取決於接線方式與 pinMode() 設定。使用 INPUT_PULLUP 時,按下按鍵通常會讀到 LOW。
本章重點整理
- Arduino 程式主要由 setup() 與 loop() 組成。
- 註解可提高程式的可讀性與維護性。
- 變數用來儲存可能改變的資料,常數用來保存不應改變的值。
- bool、char、int、unsigned int、long、float 與 String 適合不同類型的資料。
- = 是指派運算子,== 才是比較是否相等。
- if 可以根據按鍵或感測器狀態決定程式要執行的動作。
- 使用有意義的變數與常數名稱,比直接在程式中寫入數字更容易維護。
本章實作練習
- 建立 const int LED_PIN = 13;,並修改 Blink 程式,讓程式統一使用 LED_PIN。
- 宣告 int sensorValue;,練習接收 analogRead(A0) 的回傳值。
- 宣告 bool ledState = false;,並思考它可以代表哪些硬體狀態。
- 嘗試使用 if (sensorValue > 500),在 Serial Monitor 顯示不同訊息。
下一章預告
下一章將進入 GPIO 與 Digital I/O 深入解析,正式開始使用 Arduino 控制硬體。
- pinMode()
- digitalWrite()
- digitalRead()
- INPUT
- OUTPUT
- INPUT_PULLUP
- 按鍵與 LED 的實際控制
後續教材的實作內容
從第 7 章開始,教材將逐步加入知識卡、完整接線圖、程式逐行解析、常見錯誤排除與延伸挑戰。
延伸挑戰可能包含按一次按鍵切換 LED 狀態,或加入蜂鳴器提示音,讓學習從閱讀進一步進入實際操作。