วิธีกำจัดการตีกลับของผู้ติดต่อเมื่อเชื่อมต่อปุ่มกับ Arduino

สารบัญ:

วิธีกำจัดการตีกลับของผู้ติดต่อเมื่อเชื่อมต่อปุ่มกับ Arduino
วิธีกำจัดการตีกลับของผู้ติดต่อเมื่อเชื่อมต่อปุ่มกับ Arduino

วีดีโอ: วิธีกำจัดการตีกลับของผู้ติดต่อเมื่อเชื่อมต่อปุ่มกับ Arduino

วีดีโอ: วิธีกำจัดการตีกลับของผู้ติดต่อเมื่อเชื่อมต่อปุ่มกับ Arduino
วีดีโอ: Using buttons with your microcontroller in Assembly - Part 9 Microcontroller Basics (PIC10F200) 2024, อาจ
Anonim

เราได้ดูการเชื่อมต่อปุ่มกับ Arduino แล้วและได้กล่าวถึงปัญหาการติดต่อ "ตีกลับ" นี่เป็นปรากฏการณ์ที่น่ารำคาญมากที่ทำให้เกิดการกดปุ่มซ้ำๆ และทำให้ยากต่อการจัดการการคลิกปุ่มโดยทางโปรแกรม มาพูดถึงวิธีกำจัดการตีกลับของผู้ติดต่อกัน

เอฟเฟกต์ตีกลับ
เอฟเฟกต์ตีกลับ

จำเป็น

  • - Arduino;
  • - ปุ่มชั้นเชิง;
  • - ตัวต้านทานที่มีค่าเล็กน้อย 10 kOhm
  • - ไดโอดเปล่งแสง;
  • - สายเชื่อมต่อ

คำแนะนำ

ขั้นตอนที่ 1

การตีกลับของหน้าสัมผัสเป็นปรากฏการณ์ทั่วไปในสวิตช์เชิงกล ปุ่มกด สวิตช์สลับ และรีเลย์ เนื่องจากหน้าสัมผัสมักจะทำจากโลหะและโลหะผสมที่มีความยืดหยุ่น เมื่อปิดทางกายภาพ จะไม่สร้างการเชื่อมต่อที่เชื่อถือได้ในทันที ภายในช่วงเวลาสั้น ๆ ผู้ติดต่อจะปิดหลายครั้งและผลักกัน เป็นผลให้กระแสไฟฟ้าใช้ค่าสถานะคงที่ไม่ใช่ในทันที แต่หลังจากการขึ้น ๆ ลง ๆ หลายครั้ง ระยะเวลาของผลกระทบชั่วคราวนี้ขึ้นอยู่กับวัสดุสัมผัส ขนาด และการออกแบบ ภาพประกอบแสดงออสซิลโลแกรมทั่วไปเมื่อปิดหน้าสัมผัสของปุ่มชั้นเชิง จะเห็นได้ว่าเวลาจากช่วงเวลาที่เปลี่ยนเป็นสถานะคงตัวนั้นมีหลายมิลลิวินาที นี้เรียกว่า "ตีกลับ"

ผลกระทบนี้ไม่ปรากฏให้เห็นในวงจรไฟฟ้าเพื่อควบคุมแสง มอเตอร์ หรือเซ็นเซอร์และอุปกรณ์เฉื่อยอื่นๆ แต่ในวงจรที่มีการอ่านและประมวลผลข้อมูลอย่างรวดเร็ว (ซึ่งความถี่อยู่ในลำดับเดียวกับพัลส์ "ตีกลับ" หรือสูงกว่า) นี่เป็นปัญหา โดยเฉพาะอย่างยิ่ง Arduino UNO ซึ่งทำงานที่ 16 MHz นั้นยอดเยี่ยมในการจับการตีกลับของผู้ติดต่อโดยยอมรับลำดับของหนึ่งและศูนย์แทนที่จะเป็นสวิตช์ 0 ถึง 1

ติดต่อเด้งเมื่อกดปุ่ม
ติดต่อเด้งเมื่อกดปุ่ม

ขั้นตอนที่ 2

เรามาดูกันว่าการเด้งสัมผัสส่งผลต่อการทำงานที่ถูกต้องของวงจรอย่างไร มาเชื่อมต่อปุ่มนาฬิกากับ Arduino โดยใช้วงจรตัวต้านทานแบบดึงลง โดยการกดปุ่มเราจะเปิดไฟ LED และปล่อยทิ้งไว้จนกว่าจะกดปุ่มอีกครั้ง เพื่อความชัดเจน เราเชื่อมต่อ LED ภายนอกกับพินดิจิตอล 13 แม้ว่าจะสามารถจ่ายไฟในตัวได้

การเชื่อมต่อปุ่มกับ Arduino โดยใช้วงจรตัวต้านทานแบบดึงขึ้น
การเชื่อมต่อปุ่มกับ Arduino โดยใช้วงจรตัวต้านทานแบบดึงขึ้น

ขั้นตอนที่ 3

ในการทำภารกิจนี้ให้สำเร็จ สิ่งแรกที่นึกถึง:

- จำสถานะก่อนหน้าของปุ่ม;

- เปรียบเทียบกับสถานะปัจจุบัน

- หากสถานะเปลี่ยนไปเราจะเปลี่ยนสถานะของ LED

มาเขียนสเก็ตช์และโหลดลงในหน่วยความจำ Arduino

เมื่อเปิดวงจร จะเห็นผลของการเด้งสัมผัสทันที มันปรากฏตัวในความจริงที่ว่า LED ไม่สว่างขึ้นทันทีหลังจากกดปุ่มหรือสว่างขึ้นแล้วดับลงหรือไม่ปิดทันทีหลังจากกดปุ่ม แต่ยังคงเปิดอยู่ โดยทั่วไปวงจรจะทำงานไม่เสถียร และหากสำหรับงานที่เปิดไฟ LED สิ่งนี้ไม่สำคัญนัก สำหรับงานอื่นๆ ที่จริงจังกว่านั้น ก็ไม่สามารถยอมรับได้

ร่างการกดปุ่มประมวลผลโดยไม่ต้องคำนึงถึงการตีกลับของผู้ติดต่อ
ร่างการกดปุ่มประมวลผลโดยไม่ต้องคำนึงถึงการตีกลับของผู้ติดต่อ

ขั้นตอนที่ 4

เราจะพยายามแก้ไขสถานการณ์ เราทราบดีว่าการติดต่อกลับเกิดขึ้นภายในไม่กี่วินาทีหลังจากการปิดผู้ติดต่อ มารอกัน 5ms หลังจากเปลี่ยนสถานะของปุ่ม เวลานี้สำหรับบุคคลนั้นเกือบจะเกิดขึ้นทันที และการกดปุ่มโดยบุคคลมักจะใช้เวลานานกว่ามาก - หลายสิบมิลลิวินาที และ Arduino ก็ใช้งานได้ดีในช่วงเวลาสั้นๆ เช่นนี้ และ 5 มิลลิวินาทีเหล่านี้จะช่วยให้สามารถตัดการเด้งของผู้ติดต่อจากการกดปุ่มได้

ในภาพร่างนี้ เราจะประกาศขั้นตอน debounce () ("bounce" ในภาษาอังกฤษเป็นเพียง "bounce" คำนำหน้า "de" หมายถึงกระบวนการย้อนกลับ) ไปยังอินพุตที่เราระบุสถานะก่อนหน้าของปุ่ม หากการกดปุ่มใช้เวลานานกว่า 5 มิลลิวินาที แสดงว่าเป็นการกดปุ่มจริงๆ

โดยการตรวจจับการกด เราจะเปลี่ยนสถานะของ LED

อัปโหลดภาพร่างไปยังบอร์ด Arduino ตอนนี้ทุกอย่างดีขึ้นมาก! ปุ่มทำงานไม่มีสะดุด เมื่อกดแล้ว ไฟ LED จะเปลี่ยนสถานะตามที่เราต้องการ

ร่างการประมวลผลการกดปุ่มโดยคำนึงถึงการตีกลับของผู้ติดต่อ
ร่างการประมวลผลการกดปุ่มโดยคำนึงถึงการตีกลับของผู้ติดต่อ

ขั้นตอนที่ 5

ฟังก์ชันที่คล้ายกันมีให้โดยไลบรารีพิเศษ เช่น ไลบรารี Bounce2คุณสามารถดาวน์โหลดได้จากลิงก์ในส่วน "แหล่งที่มา" หรือบนเว็บไซต์ https://github.com/thomasfredericks/Bounce2 ในการติดตั้งไลบรารี่ ให้วางไว้ในไดเร็กทอรีไลบรารีของสภาพแวดล้อมการพัฒนา Arduino และรีสตาร์ท IDE

ไลบรารี "Bounce2" มีวิธีการดังต่อไปนี้:

ตีกลับ () - การเริ่มต้นของวัตถุ "ตีกลับ";

ช่วงเวลาเป็นโมฆะ (ms) - ตั้งเวลาหน่วงเป็นมิลลิวินาที

แนบเป็นโมฆะ (หมายเลขพิน) - ตั้งค่าพินที่เชื่อมต่อปุ่ม

int update () - อัปเดตอ็อบเจ็กต์และคืนค่า จริง หากสถานะพินเปลี่ยนไป และเป็นเท็จมิฉะนั้น

int read () - อ่านสถานะใหม่ของพิน

มาเขียนร่างของเราใหม่โดยใช้ห้องสมุด คุณยังสามารถจำและเปรียบเทียบสถานะในอดีตของปุ่มกับสถานะปัจจุบันได้ แต่มาทำให้อัลกอริทึมง่ายขึ้นกันเถอะ เมื่อกดปุ่ม เราจะนับการกด และการกดคี่แต่ละครั้งจะทำให้ไฟ LED ติด และการกดแต่ละครั้งจะดับลง ภาพร่างนี้ดูกระชับ อ่านง่าย และใช้งานง่าย

แนะนำ: