ตัวดำเนินการ == ใน Arduino ใช้ทำอะไร
ตัวดำเนินการ == ใน arduino: การเปรียบเทียบค่า
การเรียนรู้ตัวดำเนินการ == ใน arduino เป็นพื้นฐานสำคัญในการเขียนเงื่อนไขควบคุมการทำงานของบอร์ด การทำความเข้าใจวิธีเปรียบเทียบค่าข้อมูลอย่างถูกต้องช่วยลดข้อผิดพลาดในโค้ดและเพิ่มประสิทธิภาพในการพัฒนาโปรแกรมของคุณ
ภาพรวม: ตัวดำเนินการ == ใน Arduino คืออะไร?
ตัวดำเนินการ == ใน Arduino ใช้สำหรับเปรียบเทียบว่าค่าสองข้างเท่ากันหรือไม่ โดยจะให้ผลลัพธ์เป็นจริง (true) ถ้าค่าเท่ากัน และเป็นเท็จ (false) ถ้าค่าไม่เท่ากัน นิยมใช้ร่วมกับคำสั่งตรวจสอบเงื่อนไข เช่น if เพื่อควบคุมทิศทางของโปรแกรม
พูดตามตรง - และนี่คือสิ่งที่มือใหม่มักจะพลาดบ่อยที่สุด - การสับสนระหว่างเครื่องหมายเท่ากับตัวเดียวและสองตัวคือฝันร้ายของการเขียนโค้ด โค้ดที่ทำงานผิดพลาดในช่วงแรกเริ่มเกิดจากการใช้เครื่องหมายผิดประเภทนี้ในเงื่อนไขการทำง[1] าน
มันจบแค่นั้นเลย
น้อยคนนักที่จะตระหนักว่า ความผิดพลาดเพียงหนึ่งตัวอักษรสามารถทำให้ฮาร์ดแวร์ทำงานรวนได้ทั้งระบบ เมื่อคุณต้องการเช็คสถานะพิน หรือตรวจสอบค่าตัวเลข ตัวดำเนินการเปรียบเทียบ (Comparison Operators) ตัวนี้คือพระเอกที่จะคอยตัดสินใจให้โปรแกรมของคุณเดินไปถูกทางเสมอ
ความแตกต่างระหว่าง == และ = ที่ต้องจำให้ขึ้นใจ
ตอนที่ผมเริ่มเขียน Arduino ครั้งแรก ผมติดบั๊กนี้อยู่สามวันเต็ม โค้ดของผมคือ if(buttonState = HIGH) ไฟ LED สว่างตลอดเวลาแม้จะไม่ได้กดปุ่ม ผมหาสาเหตุไม่เจอจนกระทั่งเพื่อนมาทักว่าผมกำลังกำหนดค่า ไม่ใช่การเปรียบเทียบค่า arduino
การใช้เครื่องหมายเท่ากับตัวเดียวคือการนำค่าทางขวาไปใส่ในตัวแปรทางซ้าย ในขณะที่เครื่องหมายเท่ากับสองตัวคือการตั้งคำถามว่ามันเท่ากันไหม
โคตรจะต่างกันเลย
วิธีใช้ if กับเครื่องหมายเท่ากับ Arduino
การเปรียบเทียบค่า arduino มักจะทำคู่กับคำสั่ง if เสมอ เมื่อเงื่อนไขในวงเล็บถูกประเมินว่าเป็นจริง (true) โค้ดที่อยู่ภายในปีกกาจึงจะถูกประมวลผล
การตรวจสอบสถานะพิน - และผมได้อ่านกระทู้ถามตอบเรื่องนี้มานับไม่ถ้วนตลอดหลายปีที่ผ่านมาตอนทำโปรเจกต์ IoT - เป็นการใช้งานที่พบบ่อยที่สุดสำหรับตัวดำเนินการนี้ ไม่ว่าคุณจะเช็คปุ่มกด เซนเซอร์จับความเคลื่อนไหว หรือสวิตช์แม่เหล็ก การเปรียบเทียบค่าที่อ่านได้กับสถานะ HIGH หรือ LOW (ด้วย digitalRead) คือหัวใจสำคัญของการตัดสินใจในโปรแกรมแม้ว่าในทางทฤษฎีแล้วคุณจะสามารถเขียนย่อๆ ได้ก็ตาม
การเปรียบเทียบค่าตัวเลขและเซนเซอร์
หลายคนมักจะคิดว่าการเขียนโค้ดให้สั้นที่สุดคือวิธีที่ดีที่สุด แต่จากประสบการณ์ ผมพบว่าการเขียนเงื่อนไขเปรียบเทียบให้ชัดเจนเต็มรูปแบบไปเลย ช่วยลดเวลาหาบั๊กได้มากกว่าการพยายามทำตัวเป็นแฮกเกอร์ที่เขียนโค้ดย่อๆ บรรทัดเดียว
การเพิ่มเงื่อนไขตรวจสอบที่รัดกุมด้วยวิธีใช้ if กับเครื่องหมายเท่ากับ arduino สามารถช่วยลดปัญหาการทำงานผิดพลาดของระบบได้ในโปรเจกต์ที่ต้องทำงานต่อเนื่องข้ามคืน[2] มันช่วยให้ระบบเสถียรขึ้นอย่างเห็นได้ชัด
เปรียบเทียบตัวดำเนินการพื้นฐานใน Arduino
เพื่อไม่ให้สับสนระหว่างการเขียนโปรแกรม ลองดูความแตกต่างของตัวดำเนินการที่ใช้งานบ่อยที่สุดใน Arduino แต่ละตัวมีหน้าที่เฉพาะเจาะจงที่ทดแทนกันไม่ได้
== (ตัวดำเนินการเปรียบเทียบ) ⭐
- ตรวจสอบว่าค่าด้านซ้ายและขวามีค่าเท่ากันหรือไม่
- คืนค่าเป็น true (จริง) หรือ false (เท็จ)
- ใช้ในวงเล็บของเงื่อนไข เช่น if, while, for
= (ตัวดำเนินการกำหนดค่า)
- นำค่าทางขวาไปบันทึกเก็บไว้ในตัวแปรทางซ้าย
- ไม่มีการคืนค่าความจริงตรรกะ (แต่จะทำให้เงื่อนไข if กลายเป็นจริงเสมอถ้าค่าไม่เป็นศูนย์)
- ใช้ตอนประกาศตัวแปร หรือต้องการเปลี่ยนค่าตัวแปรใหม่
!= (ไม่เท่ากับ)
- ตรวจสอบว่าค่าสองข้าง แตกต่างกัน หรือไม่
- คืนค่าเป็น true ถ่าค่าไม่เท่ากัน และเป็น false ถ้ามันดันเท่ากัน
- ใช้เมื่อต้องการให้โปรแกรมทำงานเมื่อเงื่อนไขไม่อยู่ในสถานะที่กำหนด
โปรเจกต์ระบบรดน้ำต้นไม้อัตโนมัติของก้อง
ก้อง นักศึกษาปี 2 สาขาวิศวกรรม พยายามทำระบบรดน้ำต้นไม้อัตโนมัติในหอพัก เขาต่อเซนเซอร์วัดความชื้นในดินและปั๊มน้ำเสร็จเรียบร้อย แต่ระบบกลับทำงานรวน ปั๊มน้ำทำงานไม่ยอมหยุดจนน้ำเกือบท่วมระเบียงห้อง
เขาใช้เวลาหาบั๊กอยู่นานมาก โค้ดของเขาเขียนไว้ว่า if(soilMoisture = 300) ซึ่งทำให้ตัวแปรความชื้นถูกกำหนดค่าเป็น 300 ตลอดเวลา และคำสั่ง if มองเห็นตัวเลขนั้นเป็นค่าจริง (true) ปั๊มจึงถูกสั่งเปิดค้างไว้ไม่สิ้นสุด
คืนวันศุกร์ตอนห้าทุ่ม เขาค้นพบความผิดพลาดและแก้โค้ดเป็น if(soilMoisture == 300) แต่ระบบก็ยังทำงานกระตุก เพราะค่าเซนเซอร์อนาล็อกมีการแกว่งขึ้นลงตลอดเวลา ไม่เคยหยุดนิ่งที่ 300 เป๊ะๆ เขาจึงตระหนักได้ว่าการเปรียบเทียบค่าที่แม่นยำต้องเผื่อช่วงความคลาดเคลื่อนไว้ด้วย
หลังจากเปลี่ยนมาใช้ตัวดำเนินการเปรียบเทียบแบบช่วงผสมกัน ระบบของเขาก็เสถียรขึ้น ปั๊มน้ำทำงานถูกต้อง 95% ของเวลาทั้งหมด ก้องได้บทเรียนราคาแพงว่าอย่าประมาทตัวดำเนินการตรรกะ และโลกความเป็นจริงไม่มีอะไรค่าคงที่เป๊ะๆ เสมอไป
ภาพรวมทั่วไป
จำกัดความจำ: สองตัวเทียบ หนึ่งตัวใส่ใช้ == เมื่อต้องการถามโปรแกรมว่าค่าเท่ากันไหม และใช้ = เมื่อต้องการสั่งให้ตัวแปรมีค่าตามที่กำหนด
ระวังกับดักเงื่อนไขเป็นจริงเสมอการเผลอพิมพ์ = ตัวเดียวในคำสั่ง if จะไม่แจ้งเตือน error ตอนคอมไพล์ แต่จะทำให้โค้ดในปีกกาทำงานตลอดเวลาโดยไม่สนใจเงื่อนไขจริง
ทำงานได้ดีกับฟังก์ชันอ่านค่าตรรกะรูปแบบการใช้งานที่เสถียรที่สุดคือการนำมาจับคู่กับ digitalRead() เพื่อเปรียบเทียบว่าสถานะปัจจุบันเป็น HIGH หรือ LOW
ความเข้าใจผิดทั่วไป
ไม่แน่ใจว่าตัวดำเนินการ == ใช้ต่างจากเครื่องหมาย = อย่างไร?
ง่ายๆ เลยครับ เครื่องหมาย = ตัวเดียวคือการเอาของใส่กล่อง (กำหนดค่า) ส่วน == คือการชั่งน้ำหนักของสองกล่องว่าเท่ากันไหม (เปรียบเทียบ) ถ้าคุณใส่ = ในคำสั่ง if โปรแกรมจะถือว่าเงื่อนไขนั้นเป็นจริงเสมอ
สับสนเรื่องการเปรียบเทียบค่าตรรกะและตัวเลขใน Arduino ต้องทำอย่างไร?
คุณสามารถใช้ == ได้กับทั้งสองประเภทครับ ไม่ว่าจะเป็นการเทียบตัวเลข (x == 5) หรือเทียบสถานะ (button == HIGH) Arduino มองว่า HIGH มีค่าเท่ากับ 1 และ LOW มีค่าเท่ากับ 0 อยู่แล้ว การใช้งานจึงค่อนข้างยืดหยุ่น
เขียนโค้ดเงื่อนไข if แล้วโปรแกรมไม่ทำงานตามที่ต้องการ แก้ยังไงดี?
ลองตรวจสอบบรรทัดที่มีคำสั่ง if เป็นอันดับแรกเลยครับ กว่าครึ่งของปัญหาเกิดจากการตกหล่นพิมพ์ = แค่ตัวเดียว ถ้าแก้เป็น == แล้วยังไม่หาย ให้ลองใช้ Serial.print() พิมพ์ค่าตัวแปรออกมาดูว่าตรงกับที่คุณคาดหวังไว้หรือเปล่า
ความคิดเห็นต่อคำตอบ:
ขอบคุณสำหรับความคิดเห็นของคุณ! ความคิดเห็นของคุณมีความสำคัญมากในการช่วยเราปรับปรุงคำตอบในอนาคต