關閉

第6章 Arduino 程式設計基礎:變數、資料型別、運算子與 if 判斷教學

本章介紹 Arduino 程式設計的核心基礎,說明 setup() 與 loop() 的執行方式,以及註解、變數、常數與常見資料型別的用途。內容進一步解析指派、算術與比較運算子,並透過按鍵、LED 與感測器範例,學習使用 if 條件判斷控制 Arduino 硬體,為後續 GPIO 與感測器實作建立基礎。

學習目標

本章將介紹 Arduino 程式設計的基本觀念,帶你理解程式架構、註解、變數、常數、資料型別、運算子與條件判斷。

這些基礎將用於後續的 LED、按鍵、感測器與其他電子元件控制。

為什麼要學 Arduino 程式設計?

Arduino 是一塊可以控制電子元件的開發板,但真正決定開發板要執行什麼工作的,是寫入其中的程式。

LED 是否亮起、馬達何時轉動、LCD 顯示什麼文字,以及按下按鍵後要執行什麼動作,全部都由程式決定。

Arduino 使用以 C/C++ 為基礎的程式語言,並由官方提供大量容易使用的函式,因此學習門檻通常比直接學習一般 C++ 更低。

Arduino 程式的基本架構

每支 Arduino 程式至少包含 setup() 與 loop() 兩個函式。

void setup()
{
}

void 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:表示真或假

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。

本章重點整理

本章實作練習

下一章預告

下一章將進入 GPIO 與 Digital I/O 深入解析,正式開始使用 Arduino 控制硬體。

後續教材的實作內容

從第 7 章開始,教材將逐步加入知識卡、完整接線圖、程式逐行解析、常見錯誤排除與延伸挑戰。

延伸挑戰可能包含按一次按鍵切換 LED 狀態,或加入蜂鳴器提示音,讓學習從閱讀進一步進入實際操作。