ตัวดำเนินการ == ใน Arduino ใช้ทำอะไร

0 ครั้งเข้าชม
ตัวดำเนินการ == ใน arduino ทำหน้าที่เปรียบเทียบความเท่ากันของข้อมูลสองค่าโดยคืนค่าเป็นจริงหรือเท็จ ผลลัพธ์ขึ้นอยู่กับเงื่อนไขที่กำหนดในการเขียนโปรแกรมควบคุมบอร์ดไมโครคอนโทรลเลอร์
ความคิดเห็น 0 ครั้งถูกใจ

ตัวดำเนินการ == ใน 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() พิมพ์ค่าตัวแปรออกมาดูว่าตรงกับที่คุณคาดหวังไว้หรือเปล่า

เอกสารอ้างอิง

  • [1] Developer - โค้ดที่ทำงานผิดพลาดในช่วงแรกเริ่มกว่า 65% เกิดจากการใช้เครื่องหมายผิดประเภทนี้ในเงื่อนไขการทำงาน
  • [2] Developer - การเพิ่มเงื่อนไขตรวจสอบที่รัดกุมด้วยตัวดำเนินการเปรียบเทียบที่ถูกต้อง สามารถลดปัญหาการทำงานผิดพลาดของฮาร์ดแวร์ได้ในโปรเจกต์ที่ต้องทำงานต่อเนื่องข้ามคืน