กดปุ่มเพื่อรับเหตุการณ์มากเกินไป


12

ฉันกำลังเขียนเครื่องเล่น mp3 ที่เขียนข้อมูลไปยังจอแสดงผล LCD ฉันต้องการแปลงจากการใช้แป้นพิมพ์เป็นปุ่มกด แต่ฉันได้รับการกดปุ่มมากเกินไปอย่างต่อเนื่อง ฉันพยายามดึงขึ้นและลง / ขอบที่เพิ่มขึ้น แต่ฉันยังคงได้รับผลลัพธ์เดียวกัน มีใครรู้บ้างว่าเป็นปัญหาที่ทราบกันดีหรือฉันแค่ทำอะไรผิดพลาด? โอ้ฉันกำลังทำสิ่งนี้ทั้งหมดใน C โดยใช้ wiringPi


1
เพียงเพิ่มโซลูชั่นหม้อซอฟต์แวร์ลองดูเพื่อนของเราในไมโครคอนโทรลเลอร์ arduino.cc/en/Tutorial/Debounce
Cammy_the_block

นี่คือตัวอย่างจากสิ่งที่ฉันเขียนสักครู่ if(digitalRead(data) && millis()-startTime > 10){และตั้งค่า startTime ตลอดเวลาที่มันเข้าสู่ลูป
Cammy_the_block

เพียงแค่สงสัย; ฉันจะตั้งค่าเริ่มต้นเวลาเป็นอะไร
linuxgnuru

ตัวนับเวลาเรียงลำดับบางส่วน Arduino มีฟังก์ชั่นมิลลิวินาทีที่ให้เวลาตั้งแต่เริ่มต้น
Cammy_the_block

โอ้ตกลงแล้วเดินสายPi wiringpi.com/reference/timing
linuxgnuru

คำตอบ:


12

ปุ่มเชิงกลและสวิตช์สามารถได้รับผลกระทบจากการตีกลับของสวิตช์ซึ่งจะสลับอย่างรวดเร็วระหว่างการเปิดและปิดเป็นเวลาหลายมิลลิวินาที

คุณสามารถลองเปิดใช้งานปุ่ม / สวิตช์ในซอฟต์แวร์หรือฮาร์ดแวร์

อาจเป็นซอฟต์แวร์ที่ง่ายที่สุด

หากระดับการเปลี่ยนแปลง (เป็นปิดหรือปิดเป็นเปิด) ให้รอ x มิลลิวินาทีและอ่าน gpio อีกครั้ง หากยังอยู่ในสถานะใหม่ให้ถือว่าการเปลี่ยนแปลงนั้นเป็นจริง ค่าของ x อาจเท่ากับ 20

สำหรับวิธีแก้ปัญหาฮาร์ดแวร์ให้มองหาโพสต์ประเภทนี้


8

ใช้เวลาในการอ่านคู่มือ debouncing แจ็ค Ganssle ของ หน้าแรกแสดงให้เห็นถึงปัญหาในรายละเอียดที่ดีและวิธีที่สองที่จะจัดการกับมันในฮาร์ดแวร์หรือซอฟต์แวร์ ไม่มีวิธีการ debounce ที่ 'สมบูรณ์แบบ' แต่มีหลายวิธีที่ไม่ดี!

นี่เป็นปัญหาที่คุณจะต้องเจอซ้ำ ๆ หากมีการเชื่อมต่อซอฟต์แวร์ด้วยสวิตช์ดังนั้นจึงควรใช้เวลาในการทำความเข้าใจและบทความของแจ็คเป็นวิธีที่รัดกุมที่สุดที่ฉันเคยเห็นมา


2

ในแอพพลิเคชั่นที่มีสัญลักษณ์ระบบฉันมักจะใช้ shift register

unsigned char button_checker;

// inside the system ticker

button_checker <<= 1; 
button_checker += INPUT;

if (button_checker == 0xFF) 
{ 
    // button was pressed 
}

แน่นอนคุณควรดำเนินการกดปุ่มเหตุการณ์บนขอบที่เพิ่มขึ้น


1
นั่นเป็นวิธีที่น่าสนใจ ปรับแต่งได้อย่างง่ายดาย (โดยการปิดบิตที่สำคัญที่สุดของ button_checker) เพื่อต้องการจำนวนการอ่านต่อเนื่องที่แตกต่างกัน
joan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.