पुश बटन कई घटनाओं हो रही है


12

मैं एक एमपी 3 प्लेयर लिख रहा हूं जो एक एलसीडी डिस्प्ले को जानकारी लिखता है, मैं इसे कीबोर्ड से पुश बटन का उपयोग करने के लिए बदलना चाहता हूं, लेकिन मुझे लगातार कई महत्वपूर्ण प्रेस मिल रहे हैं। मैं ऊपर और गिरने / बढ़ती बढ़त की कोशिश की है, लेकिन मैं अभी भी एक ही परिणाम प्राप्त कर रहा हूँ। किसी को भी पता है कि यह एक ज्ञात मुद्दा है या मैं सिर्फ कुछ गलत कर रहा हूँ? ओह, मैं भी पूरी तरह से सी में wiringPi का उपयोग कर रहा हूँ।


1
बस सॉफ्टवेयर समाधान के पॉट में जोड़ने के लिए, माइक्रो कंट्रोलर में हमारे दोस्त की जाँच करें। arduino.cc/en/Tutorial/Debounce
Cammy_the_block

यहाँ कुछ है जो मैंने कुछ समय पहले लिखा था से एक स्निपेट है। if(digitalRead(data) && millis()-startTime > 10){और लूप के लिए प्रवेश करने के लिए कभी भी टाइमटाइम सेट करें।
Cammy_the_block

बस सोच रहा; वास्तव में मैं क्या करने के लिए startTime सेट होगा?
linuxgnuru

कुछ थोथा समय काउंटर। Arduino में फ़ंक्शन मिलिस है जो शुरुआत के बाद से समय देता है।
Cammy_the_block

आह ठीक है, तो wiringPi wiringpi.com/reference/timing
linuxgnuru

जवाबों:


12

मैकेनिकल बटन और स्विच स्विच उछाल से पीड़ित हो सकते हैं जहां वे कई मिलीसेकंड के लिए खुले और बंद के बीच तेजी से टॉगल करते हैं।

आप सॉफ्टवेयर या हार्डवेयर में बटन / स्विच को डिबार करने की कोशिश कर सकते हैं।

शायद सॉफ्टवेयर में सबसे सरल है।

यदि स्तर बदलता है (चालू बंद, या बंद चालू) प्रतीक्षा करें x मिलीसेकंड और फिर से gpio पढ़ें। यदि यह अभी भी नए राज्य में है तो मान लें कि यह एक वास्तविक संक्रमण है। X का मान 20 जैसा कुछ हो सकता है।

हार्डवेयर समाधान के लिए इस तरह की पोस्ट देखें


8

जैक गन्सल के डिबॉन्डिंग गाइड को पढ़ने के लिए समय निकालें । पहला पृष्ठ समस्या को बहुत विस्तार से दिखाता है, और दूसरा हार्डवेयर या सॉफ्टवेयर में इससे कैसे निपटना है। वहाँ एक 'सही' बहस विधि नहीं है, लेकिन बहुत सारे बुरे हैं!

यह एक समस्या है जो आपको बार-बार आएगी यदि स्विचेस के साथ सॉफ्टवेयर को इंटरफेज किया जाए, तो इसे समझने में समय लगता है और जैक का लेख सबसे संक्षिप्त तरीका है जो मैंने ऐसा करने के लिए देखा है।


2

जिन अनुप्रयोगों में एक सिस्टम टिकर है मैं आमतौर पर एक शिफ्ट रजिस्टर लागू करता हूं।

unsigned char button_checker;

// inside the system ticker

button_checker <<= 1; 
button_checker += INPUT;

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

बेशक, आपको बटन प्रेस घटना को केवल एक बढ़ते किनारे पर ले जाना चाहिए।


1
यह एक दिलचस्प विधि है। आसानी से अनुकूलित (लगातार बटन के सबसे महत्वपूर्ण बिट्स को बंद करके) लगातार रीड की एक अलग संख्या की आवश्यकता होती है।
joan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.