🧩 1. ความหมายของ Operator
Operator (ตัวดำเนินการ) คือ สัญลักษณ์ที่ใช้ “กระทำ” บางอย่างกับข้อมูลหรือค่าตัวแปร
เช่น การบวก ลบ เปรียบเทียบ ตรวจเงื่อนไข หรือตรวจสอบบิต
📘 ตัวอย่าง:
int x = 10 + 5; // + → Operator บวก
if (x > 10) {...} // > → Operator เปรียบเทียบ
⚙️ 2. ประเภทของ Operators ใน Arduino / ESP32
| ลำดับที่ | ชื่อเต็ม | ตัวอย่าง | ใช้ทำอะไร |
|---|---|---|---|
| 1️⃣ | Arithmetic Operators | + - * / % | คำนวณทางคณิตศาสตร์ |
| 2️⃣ | Assignment Operators | = += -= *= /= %= | กำหนดค่าให้ตัวแปร |
| 3️⃣ | Comparison Operators | == != > < >= <= | เปรียบเทียบค่า |
| 4️⃣ | Logical Operators | `&& | |
| 5️⃣ | Bitwise Operators | `& | ^ ~ << >>` |
| 6️⃣ | Increment / Decrement | ++ -- | เพิ่มหรือลดค่า 1 |
| 7️⃣ | Conditional (Ternary) | ? : | if แบบย่อ |
| 8️⃣ | Miscellaneous | sizeof, ,, () | อื่น ๆ เช่น วัดขนาด, กลุ่มนิพจน์ |
🧮 3. Arithmetic Operators (คณิตศาสตร์)
| Operator | ความหมาย | ตัวอย่าง | ผลลัพธ์ |
|---|---|---|---|
+ | บวก | 5 + 3 | 8 |
- | ลบ | 5 - 3 | 2 |
* | คูณ | 5 * 3 | 15 |
/ | หาร | 5 / 2 | 2 (int) หรือ 2.5 (float) |
% | หารเอาเศษ | 5 % 2 | 1 |
📘 ตัวอย่าง:
int a = 7, b = 2;
Serial.println(a / b); // 3
Serial.println((float)a / b); // 3.50
ถ้าเป็น
int / int→ หารแบบจำนวนเต็ม
ถ้าอยากได้ทศนิยม → แปลงเป็น float ก่อน(float)a / b
🧾 4. Assignment Operators (กำหนดค่า)
| Operator | ตัวอย่าง | ความหมาย |
|---|---|---|
= | x = 10 | กำหนดค่าให้ตัวแปร |
+= | x += 5 | บวกแล้วเก็บในตัวเอง → x = x + 5 |
-= | x -= 5 | ลบแล้วเก็บในตัวเอง |
*= | x *= 2 | คูณแล้วเก็บในตัวเอง |
/= | x /= 2 | หารแล้วเก็บในตัวเอง |
%= | x %= 2 | หารเอาเศษแล้วเก็บในตัวเอง |
📘 ตัวอย่าง:
int x = 10;
x += 3; // 13
x *= 2; // 26
Serial.println(x);
⚖️ 5. Comparison Operators (เปรียบเทียบ)
| Operator | ความหมาย | ตัวอย่าง | ผลลัพธ์ |
|---|---|---|---|
== | เท่ากับ | x == y | true / false |
!= | ไม่เท่ากับ | x != y | true / false |
> | มากกว่า | x > y | true / false |
< | น้อยกว่า | x < y | true / false |
>= | มากกว่าหรือเท่ากับ | x >= y | true / false |
<= | น้อยกว่าหรือเท่ากับ | x <= y | true / false |
📘 ตัวอย่าง:
int temp = 28;
if (temp > 30) Serial.println("Hot");
else Serial.println("Cool");
🧠 6. Logical Operators (ตรรกะ)
ใช้ในการตรวจสอบ “หลายเงื่อนไขพร้อมกัน”
ค่าผลลัพธ์จะเป็น true (1) หรือ false (0)
| Operator | ชื่อ | ความหมาย | ตัวอย่าง |
|---|---|---|---|
&& | AND | ทั้งคู่ต้องเป็นจริง | (a>0 && b<10) |
| ` | ` | OR | |
! | NOT | กลับค่าตรรกะ | !(a>5) |
📘 ตัวอย่าง:
int temp = 35;
int humid = 80;
if (temp > 30 && humid > 70) {
Serial.println("ร้อนและชื้น");
}
🔢 7. Bitwise Operators (ระดับบิต)
ใช้มากในงานควบคุมฮาร์ดแวร์, การตั้งค่า Register, การทำบิตมาสก์
| Operator | ความหมาย | ตัวอย่าง | ผลลัพธ์ (ฐาน 2) |
|---|---|---|---|
& | AND บิต | 0b1100 & 0b1010 | 0b1000 |
| ` | ` | OR บิต | `0b1100 |
^ | XOR | 0b1100 ^ 0b1010 | 0b0110 |
~ | NOT | ~0b1010 | 0b0101 |
<< | Shift Left | 0b0001 << 2 | 0b0100 |
>> | Shift Right | 0b1000 >> 2 | 0b0010 |
📘 ตัวอย่าง:
byte val = 0b0001;
val = val << 3; // 0b1000
ใช้ในงานเช่น “เลื่อนบิตเพื่อควบคุม LED หลายดวง” หรือ “อ่านสถานะขา I/O หลายบิต”
➕ 8. Increment / Decrement (เพิ่ม–ลดค่า)
| Operator | ความหมาย | ตัวอย่าง | ผลลัพธ์ |
|---|---|---|---|
++ | เพิ่มค่า 1 | x++ หรือ ++x | เพิ่มทีละ 1 |
-- | ลดค่า 1 | x-- หรือ --x | ลดทีละ 1 |
ความแตกต่างเล็กน้อย:
int a = 5;
Serial.println(a++); // พิมพ์ 5 แล้วค่อยเพิ่ม → a=6
Serial.println(++a); // เพิ่มก่อน → พิมพ์ 7
❓ 9. Conditional (Ternary) Operator
ใช้แทน if–else แบบย่อ
รูปแบบ:
(condition) ? value_if_true : value_if_false;
📘 ตัวอย่าง:
int temp = 30;
String msg = (temp > 28) ? "Hot" : "Cool";
Serial.println(msg);
ถ้า
temp > 28เป็นจริง →msg = "Hot"
ถ้าเท็จ →"Cool"
📦 10. Miscellaneous Operators (อื่น ๆ)
| Operator | ความหมาย | ตัวอย่าง |
|---|---|---|
sizeof() | คืนค่าขนาด (หน่วย byte) | sizeof(int) → 4 |
, (Comma) | ประมวลผลหลายคำสั่งในบรรทัดเดียว | a=5, b=10; |
() | จัดกลุ่มนิพจน์ | (a+b)*c |
📘 ตัวอย่าง:
int arr[5];
Serial.println(sizeof(arr)); // 10 (ถ้า int=2 bytes)
Serial.println(sizeof(arr)/sizeof(arr[0])); // จำนวนสมาชิกในอาเรย์
⚡ 11. ลำดับความสำคัญของ Operator (Precedence)
| ลำดับ | ตัวอย่าง | ลักษณะ |
|---|---|---|
| 1 | () | วงเล็บมาก่อน |
| 2 | ++ -- | เพิ่ม/ลดก่อน |
| 3 | * / % | คูณ/หาร/เศษ |
| 4 | + - | บวก/ลบ |
| 5 | << >> | Shift |
| 6 | < <= > >= | เปรียบเทียบ |
| 7 | == != | ตรวจเท่ากัน |
| 8 | `& ^ | ` |
| 9 | `&& | |
| 10 | = += -= ... | กำหนดค่า |
| 11 | , | สุดท้าย |
ใช้วงเล็บ
( )เพื่อควบคุมลำดับเสมอ จะปลอดภัยที่สุด
💡 12. ตัวอย่างรวม: ใช้ Operators ร่วมกัน
const int LED = 2;
int count = 0;
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(115200);
}
void loop() {
count++;
// แสดงเลขคู่/คี่
String msg = (count % 2 == 0) ? "Even" : "Odd";
Serial.printf("Count = %d (%s)\n", count, msg.c_str());
// ถ้าเป็นเลขคู่ → เปิดไฟ
digitalWrite(LED, (count % 2 == 0) ? HIGH : LOW);
delay(500);
}
ผลลัพธ์
Count = 1 (Odd)
Count = 2 (Even)
Count = 3 (Odd)
...
🧠 13. เคล็ดลับ
- ใช้
Serial.println()แสดงค่าผลลัพธ์จากการลอง Operator แต่ละแบบ - ให้ลองเปรียบเทียบค่าจริง–เท็จ (
true=1,false=0) - สร้างโจทย์ “เช็คไฟ LED เปิด/ปิดตามเงื่อนไข” โดยใช้
&&,||,%, และ? : - ให้ฝึก “บิตมาสก์” ควบคุม LED 8 ดวง (ใช้
<<,|,&)
📚 14. สรุปภาพรวม Operators ทั้งหมด
| หมวด | ตัวอย่าง | หมายเหตุ |
|---|---|---|
| Arithmetic | + - * / % | บวกลบคูณหาร |
| Assignment | = += -= *= /= %= | ย่อการกำหนดค่า |
| Comparison | == != > < >= <= | ตรวจเท่ากัน/มากน้อย |
| Logical | `&& | |
| Bitwise | `& | ^ ~ << >>` |
| Increment/Decrement | ++ -- | เพิ่มหรือลด 1 |
| Conditional | ? : | if แบบย่อ |
| Miscellaneous | sizeof, , , () | เครื่องมือเสริม |
🧾 15. ฝึกทำ
1️⃣ เขียนโปรแกรมรับค่าอุณหภูมิจาก Serial → ถ้าเกิน 30°C ให้พิมพ์ “Hot”
2️⃣ ใช้ ?: ตัดสินใจเปิดไฟ LED ตามเงื่อนไข
3️⃣ สร้างโปรแกรมนับเลข 1–10 แล้วโชว์ว่าเป็น “Even / Odd”
4️⃣ ใช้ Bitwise เปิด LED ทีละดวง (เลื่อนบิต)
5️⃣ ใช้ sizeof() ตรวจขนาดตัวแปรชนิดต่าง ๆ
