บทนำ
ในการเขียนโปรแกรม สิ่งสำคัญไม่ใช่แค่การสั่งให้คอมพิวเตอร์ทำงานทีละบรรทัดเท่านั้น แต่เรามักต้องการให้โปรแกรม ตัดสินใจ ว่าจะทำงานแบบไหนขึ้นอยู่กับสถานการณ์ที่เกิดขึ้นจริง เช่น
- ถ้าอุณหภูมิสูงเกิน 30°C ให้พัดลมเปิดอัตโนมัติ
- ถ้าเซนเซอร์วัดแสงตรวจพบว่ามืด ให้เปิดไฟ
- ถ้าคะแนนสอบมากกว่า 80 ให้แสดงว่า “ผ่าน” ถ้าน้อยกว่านั้นให้แสดงว่า “ไม่ผ่าน”
ตรงนี้เองที่เราจะใช้คำสั่ง if – else if – else ซึ่งเรียกว่า โครงสร้างควบคุมการทำงานแบบมีเงื่อนไข (Control Structure / Conditional Statement)
ทำไมถึงสำคัญ?
- เพราะมันช่วยให้โปรแกรม ยืดหยุ่น และ ฉลาดขึ้น ไม่ได้ทำงานแบบตายตัว
- ช่วยให้โค้ดสามารถโต้ตอบกับ ค่า Input ที่เปลี่ยนไป เช่น ค่าจากปุ่มกด, เซนเซอร์, หรือข้อมูลที่ผู้ใช้ป้อน
- เป็นพื้นฐานของการเขียนโปรแกรมที่ซับซ้อนขึ้น เช่น ระบบอัตโนมัติ, IoT, หรือการตัดสินใจหลายขั้นตอน
ใช้ที่ไหนบ้าง?
- ในการเขียนโค้ดด้วย ภาษา C/C++ บน Arduino IDE
- ในการทำโปรเจกต์ ESP32 หรือไมโครคอนโทรลเลอร์อื่น ๆ ที่ต้องใช้เซนเซอร์
- ในโค้ด C++ ทั่วไป เช่น เกม, โปรแกรมคำนวณ, และระบบควบคุมต่าง ๆ
พูดง่าย ๆ คือ ถ้าคุณจะก้าวเข้าสู่โลกการเขียนโปรแกรมหรือการทำโปรเจกต์ IoT คำสั่ง if – else if – else จะเป็นเหมือน “บันไดขั้นแรก” ที่คุณต้องเข้าใจให้ถ่องแท้
ยังไม่รู้ว่าจะดาวน์โหลด Arduino IDE ที่ไหน? คลิกเลยที่ Arduino IDE Download & Install เพื่อเริ่มต้นใช้งานได้ทันที!

โครงสร้างพื้นฐานของ if
คำสั่ง if เป็นรูปแบบเงื่อนไขที่ง่ายที่สุด ใช้เพื่อตรวจสอบเงื่อนไขเพียง หนึ่งเงื่อนไข เท่านั้น
ถ้าเงื่อนไขที่กำหนดเป็น จริง (true) โปรแกรมจะรันโค้ดภายใน { }
แต่ถ้าเงื่อนไขเป็น เท็จ (false) โปรแกรมจะ ข้าม คำสั่งในบล็อกนั้นไปทันที
รูปแบบ (Syntax)
if (เงื่อนไข) {
// คำสั่งที่จะทำงานเมื่อเงื่อนไขเป็นจริง
}
- (เงื่อนไข) = นิพจน์ที่ให้ค่าเป็นจริง (true) หรือเท็จ (false)
- { } = กลุ่มคำสั่งที่จะทำงานเมื่อเงื่อนไขเป็นจริง
ตัวอย่าง 1: ตรวจสอบตัวเลข
int x = 10;
if (x > 5) {
Serial.println("x มีค่ามากกว่า 5");
}
คำอธิบาย:
- โปรแกรมตรวจสอบว่า x > 5 หรือไม่
- เนื่องจาก 10 > 5 เป็นจริง → จึงแสดงผล x มีค่ามากกว่า 5
ตัวอย่าง 2: ควบคุม LED บนบอร์ด ESP32
int ledPin = 2; // ขา LED บนบอร์ด ESP32
int buttonPin = 4; // ขาปุ่มกด
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // ถ้ากดปุ่ม → เปิดไฟ LED
}
}
คำอธิบาย:
- ใช้ if ตรวจสอบว่า buttonState เป็น HIGH (ปุ่มถูกกด) หรือไม่
- ถ้าจริง → เปิด LED
- ถ้าไม่จริง → โปรแกรมจะข้าม ไม่ทำอะไร
การใช้ if – else
คำสั่ง if – else เป็นการต่อยอดจาก if ธรรมดา โดยใช้เมื่อต้องการให้โค้ด เลือกทำงานสองทาง
- ถ้าเงื่อนไขเป็น จริง (true) → ให้ทำงานชุดหนึ่ง
- ถ้าเงื่อนไขเป็น เท็จ (false) → ให้ทำงานอีกชุดหนึ่งแทน
รูปแบบ (Syntax)
if (เงื่อนไข) {
// โค้ดที่ทำงานเมื่อเงื่อนไขเป็นจริง
} else {
// โค้ดที่ทำงานเมื่อเงื่อนไขเป็นเท็จ
}
ตัวอย่าง 1: ตรวจสอบตัวเลข
int x = 8;
if (x >= 10) {
Serial.println("x มีค่ามากกว่าหรือเท่ากับ 10");
} else {
Serial.println("x มีค่าน้อยกว่า 10");
}
ผลลัพธ์: แสดง “x มีค่าน้อยกว่า 10”
ตัวอย่าง 2: ควบคุม LED ด้วยปุ่มกด
int ledPin = 2;
int buttonPin = 4;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); // ถ้ากดปุ่ม → เปิดไฟ
} else {
digitalWrite(ledPin, LOW); // ถ้าไม่กดปุ่ม → ปิดไฟ
}
}
คำอธิบาย:
- ถ้ากดปุ่มจริง → LED ติด
- ถ้าไม่จริง (ไม่ได้กด) → LED ดับ
รายละเอียดพื้นฐานของ บอร์ดESP32 คืออะไร พร้อมจุดเด่นและวิธีเริ่มต้นใช้งาน
การใช้ if – else if – else
เมื่อโปรแกรมต้องตรวจสอบเงื่อนไขมากกว่า 2 ทางเลือก เราจะใช้ if – else if – else เพื่อจัดการเงื่อนไขแบบหลายระดับ
- if → ใช้ตรวจสอบเงื่อนไขแรก
- else if → ใช้ตรวจสอบเงื่อนไขต่อ ๆ ไป (จะเช็คตามลำดับจากบนลงล่าง)
- else → ใช้เมื่อ ไม่มีเงื่อนไขใดตรงเลย
รูปแบบ (Syntax)
if (เงื่อนไขที่ 1) {
// ทำงานเมื่อเงื่อนไขที่ 1 เป็นจริง
} else if (เงื่อนไขที่ 2) {
// ทำงานเมื่อเงื่อนไขที่ 2 เป็นจริง
} else if (เงื่อนไขที่ 3) {
// ทำงานเมื่อเงื่อนไขที่ 3 เป็นจริง
} else {
// ทำงานเมื่อไม่มีเงื่อนไขใดเป็นจริงเลย
}
ตัวอย่าง 1: การให้เกรดนักเรียน
int score = 75;
if (score >= 80) {
Serial.println("เกรด A");
} else if (score >= 70) {
Serial.println("เกรด B");
} else if (score >= 60) {
Serial.println("เกรด C");
} else {
Serial.println("เกรด D หรือ E");
}
คำอธิบาย:
- ถ้าคะแนน ≥ 80 → เกรด A
- ถ้าไม่ใช่ แต่ ≥ 70 → เกรด B
- ถ้าไม่ใช่ แต่ ≥ 60 → เกรด C
- ถ้าไม่ตรงทุกเงื่อนไข → ได้เกรด D/E
ตัวอย่าง 2: ตรวจสอบระดับความสว่าง (ESP32 + LDR Sensor)
int ldrPin = 34;
int lightValue;
void setup() {
Serial.begin(115200);
}
void loop() {
lightValue = analogRead(ldrPin);
if (lightValue > 3000) {
Serial.println("สว่างมาก");
} else if (lightValue > 2000) {
Serial.println("สว่างปานกลาง");
} else if (lightValue > 1000) {
Serial.println("ค่อนข้างมืด");
} else {
Serial.println("มืดสนิท");
}
delay(1000);
}
คำอธิบาย:
- โปรแกรมแบ่งค่าแสงออกเป็น 4 ระดับ
- ตรวจสอบจากบนลงล่าง เจอเงื่อนไขที่ตรงแล้วจะหยุดทันที
ข้อควรระวัง
- ลำดับเงื่อนไขมีความสำคัญ → โปรแกรมจะตรวจสอบจากบนลงล่าง เจออันไหนจริงก่อนจะหยุดเลย
- เช่น ถ้าเขียน if (score >= 60) ไว้บนสุด → จะไม่เข้าถึงเงื่อนไข 70, 80
- ใช้ else ปิดท้ายเสมอในกรณีที่ต้องการ “ค่าทางออก” สำหรับทุกสถานการณ์
- ถ้าเงื่อนไขเยอะเกินไป อาจทำให้โค้ดอ่านยาก → ควรพิจารณาใช้ switch – case หรือการจัดการด้วยฟังก์ชันแทน
ตัวอย่างโค้ด Arduino IDE ที่เข้าใจง่าย รวบรวมไว้ใน Arduino IDE – Code
สรุปการใช้ if – else if – else
- if – else if – else เป็นโครงสร้างควบคุมที่ใช้ตรวจสอบเงื่อนไข หลายระดับ
- โปรแกรมจะตรวจสอบเงื่อนไข จากบนลงล่าง
- ถ้าเจอเงื่อนไขที่เป็นจริง → จะทำงานทันที และ หยุดตรวจสอบ เงื่อนไขที่เหลือ
- ถ้าไม่มีเงื่อนไขใดเป็นจริงเลย → จะไปทำงานใน else
- ใช้งานได้กับ ทุกโปรแกรม โดยเฉพาะงานที่ต้อง แบ่งช่วงค่า เช่น:
- ตรวจสอบคะแนนสอบ (A, B, C, D)
- ตรวจสอบระดับแสง (สว่างมาก / ปานกลาง / มืด)
- ตรวจสอบอุณหภูมิ (ร้อนจัด / ร้อน / ปกติ / เย็น)
- เป็นพื้นฐานที่สำคัญในงาน ESP32, Arduino และ IoT เช่น
- เปิด/ปิดพัดลมอัตโนมัติเมื่ออุณหภูมิสูงเกิน
- ควบคุมไฟส่องสว่างเมื่อเซนเซอร์ LDR ตรวจจับว่ามืด
- สั่งปั๊มน้ำทำงานตามระดับความชื้นในดิน
FAQ: if – else if – else (สำหรับมือใหม่ + ESP32/Arduino)
if กับ else ต่างกันอย่างไร?
if ใช้ตรวจสอบเงื่อนไขเมื่อเป็นจริงจึงทำงาน ส่วน else ทำงานเมื่อทุกเงื่อนไขก่อนหน้าเป็นเท็จทั้งหมด
ควรใช้ if – else หรือ if เดี่ยว ๆ เมื่อไหร่?
ถ้ามีสองทางเลือกชัดเจน (จริง/เท็จ) ใช้ if – else จะอ่านง่ายกว่า; ถ้ามีเพียงทางเลือกเดียวเมื่อเป็นจริง ใช้ if เดี่ยว ๆ พอ
เมื่อไหร่ควรใช้ if – else if – else แทน switch – case?
ถ้าตรวจช่วงค่าหรือเงื่อนไขซับซ้อน (เช่น >=, <=, &&, ||) ใช้ if – else if – else; ถ้าตรวจค่าเท่ากับคงที่ (เช่น 0,1,2 หรืออักขระ) ใช้ switch – case จะอ่านง่าย
ลำดับของ else if สำคัญไหม?
สำคัญมาก โปรแกรมเช็คจากบนลงล่าง เจอจริงก่อนจะหยุดทันที จึงควรเรียงจากกรณี “แคบ/เข้มงวดมากกว่า” ไป “กว้างกว่า”
ต้องใส่วงเล็บ { } เสมอไหม?
แนะนำให้ใส่ทุกครั้ง แม้มีคำสั่งเดียว เพื่อป้องกันความสับสนและบั๊กจากการเยื้องบรรทัด
เปรียบเทียบค่าใช้ == หรือ = ?
== คือ “เปรียบเทียบความเท่ากัน”, = คือ “กำหนดค่า” (ถ้าใช้ผิดโปรแกรมจะผิดพฤติกรรมทันที)
ผสมเงื่อนไขหลายอย่างยังไง (&&, ||)?
ใช้ && (AND) เมื่อต้องให้ทุกเงื่อนไขเป็นจริงพร้อมกัน และ || (OR) เมื่อให้เงื่อนไขใดเงื่อนไขหนึ่งเป็นจริงก็พอ ใส่วงเล็บช่วยจัดลำดับให้อ่านง่าย
อ่านค่าปุ่ม/เซนเซอร์แล้วเด้งผิดพลาด ต้องเขียน if ยังไง?
ใช้การกันเด้ง (debounce) หรืออ่านซ้ำ/เฉลี่ยค่า แล้วค่อยตัดสินใจใน if เพื่อลดการสั่นของสัญญาณ
โค้ดหลายชั้นอ่านยาก ควรทำอย่างไร?
แยกเงื่อนไขเป็นตัวแปรกลางเชิงความหมาย (เช่น bool isHot = temp>30;) หรือย้ายตรรกะไปเป็นฟังก์ชันย่อย ทำให้ if สั้นและชัด
ตัวอย่างงานจริงบน ESP32 ที่เหมาะกับ if – else if – else มีอะไรบ้าง?
แบ่งระดับพัดลมตามอุณหภูมิ, เปิดไฟตามระดับแสง, ควบคุมปั๊มน้ำตามความชื้นดิน, แจ้งเตือนตามแรงดัน/กระแส ฯลฯ ที่ต้อง “แบ่งช่วงค่า”




