🧩 1. ความหมายของ Operator

Operator (ตัวดำเนินการ) คือ สัญลักษณ์ที่ใช้ “กระทำ” บางอย่างกับข้อมูลหรือค่าตัวแปร
เช่น การบวก ลบ เปรียบเทียบ ตรวจเงื่อนไข หรือตรวจสอบบิต

📘 ตัวอย่าง:

C++
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️⃣Miscellaneoussizeof, ,, ()อื่น ๆ เช่น วัดขนาด, กลุ่มนิพจน์

🧮 3. Arithmetic Operators (คณิตศาสตร์)

Operatorความหมายตัวอย่างผลลัพธ์
+บวก5 + 38
-ลบ5 - 32
*คูณ5 * 315
/หาร5 / 22 (int) หรือ 2.5 (float)
%หารเอาเศษ5 % 21

📘 ตัวอย่าง:

C++
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หารเอาเศษแล้วเก็บในตัวเอง

📘 ตัวอย่าง:

C++
int x = 10;
x += 3;    // 13
x *= 2;    // 26
Serial.println(x);

⚖️ 5. Comparison Operators (เปรียบเทียบ)

Operatorความหมายตัวอย่างผลลัพธ์
==เท่ากับx == ytrue / false
!=ไม่เท่ากับx != ytrue / false
>มากกว่าx > ytrue / false
<น้อยกว่าx < ytrue / false
>=มากกว่าหรือเท่ากับx >= ytrue / false
<=น้อยกว่าหรือเท่ากับx <= ytrue / false

📘 ตัวอย่าง:

C++
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)

📘 ตัวอย่าง:

C++
int temp = 35;
int humid = 80;
if (temp > 30 && humid > 70) {
  Serial.println("ร้อนและชื้น");
}

🔢 7. Bitwise Operators (ระดับบิต)

ใช้มากในงานควบคุมฮาร์ดแวร์, การตั้งค่า Register, การทำบิตมาสก์

Operatorความหมายตัวอย่างผลลัพธ์ (ฐาน 2)
&AND บิต0b1100 & 0b10100b1000
``OR บิต`0b1100
^XOR0b1100 ^ 0b10100b0110
~NOT~0b10100b0101
<<Shift Left0b0001 << 20b0100
>>Shift Right0b1000 >> 20b0010

📘 ตัวอย่าง:

C++
byte val = 0b0001;
val = val << 3;  // 0b1000

ใช้ในงานเช่น “เลื่อนบิตเพื่อควบคุม LED หลายดวง” หรือ “อ่านสถานะขา I/O หลายบิต”


➕ 8. Increment / Decrement (เพิ่ม–ลดค่า)

Operatorความหมายตัวอย่างผลลัพธ์
++เพิ่มค่า 1x++ หรือ ++xเพิ่มทีละ 1
--ลดค่า 1x-- หรือ --xลดทีละ 1

ความแตกต่างเล็กน้อย:

C++
int a = 5;
Serial.println(a++); // พิมพ์ 5 แล้วค่อยเพิ่ม → a=6
Serial.println(++a); // เพิ่มก่อน → พิมพ์ 7

❓ 9. Conditional (Ternary) Operator

ใช้แทน if–else แบบย่อ
รูปแบบ:

C++
(condition) ? value_if_true : value_if_false;

📘 ตัวอย่าง:

C++
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

📘 ตัวอย่าง:

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 ร่วมกัน

C++
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);
}

ผลลัพธ์

Zsh
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 แบบย่อ
Miscellaneoussizeof, , , ()เครื่องมือเสริม

🧾 15. ฝึกทำ

1️⃣ เขียนโปรแกรมรับค่าอุณหภูมิจาก Serial → ถ้าเกิน 30°C ให้พิมพ์ “Hot”
2️⃣ ใช้ ?: ตัดสินใจเปิดไฟ LED ตามเงื่อนไข
3️⃣ สร้างโปรแกรมนับเลข 1–10 แล้วโชว์ว่าเป็น “Even / Odd”
4️⃣ ใช้ Bitwise เปิด LED ทีละดวง (เลื่อนบิต)
5️⃣ ใช้ sizeof() ตรวจขนาดตัวแปรชนิดต่าง ๆ