เคยเป็นไหมครับ จะเอาปุ่มกดมาใช้ในงาน แต่มีปัญหาว่าเวลากดปุ่มครั้งนึง กลายเป็นขึ้นมา 2-3 ครั้ง เรียกว่าลดแลกแจกแถมกันเลยทีเดียว อาการนี้เรียกว่าอาการ bounce (เด้ง) ซึ่งเกิดจากการเด้งจริงๆของหน้าสัมผัสที่เกิดจากการกดสวิตซ์ลงไปคล้ายๆสปริงนั่นล่ะฮะ ทำให้พอทันทีที่เรากด มันไม่ได้เป็นวงจรปิดจริงๆ ณ ขณะนั้น ถ้าเราเอา scope จับสัญญาณ logic ที่เกิดจากการกดสวิตซ์ 1 ครั้ง จะเห็นการเด้งได้ชัดตามรูปเลย
ซึ่งเอาจริงๆวิธีการแก้ถ้าแก้ในเชิง Hardware ก็แค่เอา Capacitor กับตัวต้านทานอีกสักตัวใส่ (ตามรูปข้างล่าง คือ R1 C1) เพื่อหน่วงเวลาการ on และการ off คล้ายการทำวงจรกรองความถี่ต่ำ (low-pass filter) เรียกว่าวงจร RC (RC circuit) ซึ่งวงจรนี้จะยอมให้ค่าที่มีความถี่ต่ำผ่าน (การกดด้วยมือปกติคนคงไม่กดปุ่มกันเร็วเท่าสปริงหรอกนะ จึงถือว่าเรากดด้วยความถี่ต่ำ) และไม่ยอมให้ความถี่สูงผ่าน (การเด้งถือว่ามีความถี่สูง) หน้าตาวงจรก็จะเป็นแบบด้านล่าง
เมื่อลองเอา scope มาวัดอีก จะเห็นว่าค่าสัญญาณค่อยๆเพิ่มขึ้นไปจนถึงจุดนึงที่เราเรียกว่า โอเค นี่ถือว่าเป็นการกดละ (ถ้า logic 5v แรงดันสัญญาณที่มากกว่าค่านึงจะถือเป็น logic 1 ต่ำกว่าค่านึง จะถือว่าเป็น logic 0 ) ซึ่งไม่ใช่ว่าการเด้งไม่เกิดขึ้น แต่การเด้งไม่สามารถไปรบกวนสัญญาณออกได้นั่นเอง
แต่ถ้า เอ๊ะ! ที่บ้านไม่มีตัวเก็บประจุ ก็อย่าตกใจไป เขียนซอร์ฟแวร์แก้ได้นะ ปัจจุบันมีทั้งแบบเขียนเองและเอา Library สำเร็จรูปมาใช้ ซึ่งการเขียนเองอาจมีหลายวิธี เช่น การนับจำนวนค่าการกดในแต่ละการวน loop (ภาษาโปรแกรมเรียกว่า iteration) ถ้าเป็น logic เดิมติดต่อกันเกินจำนวน iteration ที่กำหนด ให้ถือเป็นการกดจริงๆ หรือแบบจับเวลาว่าครั้งล่าสุดที่มีกด กดแล้วมีค่า logic เดิมแช่ไว้นานพอจะคิดว่ากดหรือไม่ ถ้าใช่ก็ถือว่าเป็นการกดจริงๆ แบบนี้เป็นต้น
ซึ่งตัวอย่างนี้จะแสดงวิธีการเขียนป้องกันการ bounce เองแบบใช้วิธีการนับจำนวนครั้งที่กดไปครับ
นี่แค่ 1 ปุ่มนะ ถ้าหลายปุ่มเราก็คงต้องทำเป็น array หรือ object ไว้เรียกใช้งาน ซึ่งมีคนใจดีทำ library มาให้สะดวกขึ้น ชื่อว่า bounce2 ตามอาการแบบนั้นเลย ซึ่ง library ตัวนี้เราสามารถติดตั้งได้จาก Arduino IDE -> Tools -> Manager Libraries แล้วพิมพ์หา bounce2 แล้วกดติดตั้งตามภาพครับ
วิธีการใช้งาน Library นี้ไม่ซับซ้อน ลองดูตัวอย่างกันสำหรับการใช้ปุ่ม 2 ปุ่มครับ
หวังว่าคงมีประโยชน์ไม่มากก็น้อย ใครที่ทำได้ทำไม่ได้ยังไง แชร์ให้ทราบกันในช่อง comment ได้นะครับ
ธนบดี บุหลันศรีชาติ
ผู้เขียน
เลี้ยงกาแฟผมสักแก้ว : https://ko-fi.com/modulemore
Reference