बटन की स्थिति अनियमित रूप से बदल रही है


14

मेरे पास मेरे Arduino के लिए एक पुश बटन है, लेकिन यह बेतरतीब ढंग से ट्रिगर हो रहा है।

मेरे पास एक पिन का बटन है जो पिन 2 से जुड़े हुए हैं और दूसरे पर जमीन से जुड़ा हुआ है।

void setup() {
    Serial.begin(9600);

    pinMode(2, INPUT);
}

void loop() {
    Serial.println(digitalRead(2));
}

मुझे उम्मीद है कि यह लगातार 1 प्रिंट करता है और 0 पर जाता है जब मैं बटन दबाता हूं लेकिन कभी-कभी यह 0 दिखाता है जब मैं इसे नहीं छूता हूं।

जवाबों:


17

जब कोई बटन उस कॉन्फ़िगरेशन में जुड़ा होता है, तो इनपुट को फ्लोटिंग कहा जाता है , जिसका अर्थ है कि यह 0 या 1 नहीं है। जब बटन दबाया जाता है, तो यह जमीन से जुड़ा होता है, इसलिए यह निश्चित रूप से 0 होता है, लेकिन जब इसे दबाया नहीं जाता है, तो हम पिन का मूल्य नहीं जानते हैं।

रोकनेवाला खींचो

हमें उस चीज़ को शामिल करने की आवश्यकता है जिसे बटन दबाए जाने पर तर्क 1 तक सिग्नल खींचने के लिए "पुल-अप" रोकनेवाला कहा जाता है।

रोकनेवाला ऊपर खींचो

स्पार्कफुन से छवि

इसका मतलब यह है कि जब बटन दबाया नहीं जाता है, तो Arduino एक तर्क 1 पढ़ता है। जब बटन दबाया जाता है, तो प्रतिरोध करने वाला जमीन पर बहता है और Arduino एक तर्क पढ़ता है 0।

आंतरिक ऊपर रोकनेवाला

Arduino में आंतरिक पुल रेसिस्टर्स भी हैं, इसलिए आपको अपने सर्किट में एक अतिरिक्त घटक जोड़ना जरूरी नहीं है। इसका उपयोग करने के कुछ तरीके हैं।

आप इसे इस तरह से करते थे:

pinMode(pin, INPUT);           // set pin to input
digitalWrite(pin, HIGH);       // turn on pullup resistors

अब हम इसे केवल एक पंक्ति में कर सकते हैं:

pinMode(pin, INPUT_PULLUP);

यह उस पिन पर 20k पुल रेसिस्टर को सक्षम करता है। जब बटन दबाया नहीं जाता है तो इनपुट फ्लोटिंग नहीं होगा।

नोट: यह केवल तभी काम करता है जब दूसरा छोर जमीन से जुड़ा हो।


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