Arduino digitalRead पढ़ना गलत है


10

मैंने अपने Arduino UNO को 4 इनपुट तारों के साथ स्थापित किया है, वे 10, 11, 12, 13 पोर्ट से कनेक्ट होते हैं, वे मेरे ब्रेडबोर्ड से जुड़े होते हैं, लेकिन तार पर कुछ नहीं होता है।

मेरा कोड बस होगा:

Serial.println(digitalRead(13));
Serial.println(digitalRead(12));
Serial.println(digitalRead(11));
Serial.println(digitalRead(10));

बात यह है कि, जब मैं संक्षेप में 5V या 3V3 से एक पिन कनेक्ट करता हूं, तो रीडिंग शुरू हो जाएगी जैसे कि: 1 0 0 1 0 0 1 1 1 1 0 0 1 1 1 0 0 बिना किसी मतलब के! मेरे वीसीसी (5 वी या 3 वी 3) से सीधे जुड़े हुए किसी भी तार के बिना रीडिंग लगातार बदल रही है, जब यह शून्य होना चाहिए!

क्या मेरा Arduino मर चुका है? मैं इसे कैसे ठीक करूं?


ट्रिगर नहीं होने पर बस अपने ट्रिगर पिन को जमीन से कनेक्ट करें!

जवाबों:


18

आपके पास जो है वह Floatingपिन कहलाता है । डिजिटल इनपुट पिन बदलने के लिए बहुत संवेदनशील होते हैं, और जब तक कि सकारात्मक रूप से एक राज्य या किसी अन्य (उच्च या निम्न) के लिए प्रेरित न हो, ब्रेडबोर्ड, मानव उंगलियों, या यहां तक ​​कि हवा जैसे पास के स्रोतों से आवारा समाई उठाएगा। इससे जुड़ा कोई भी तार थोड़ा एंटीना की तरह काम करेगा और इनपुट स्थिति को बदलने का कारण बनेगा। और मैं किसी भी तार का मतलब है, बोर्ड पर ट्रेस, ब्रेडबोर्ड के लिए तार, ब्रेडबोर्ड पिन, यहां तक ​​कि आईसी का धातु पिन भी।

इसे Arduino संदर्भ पृष्ठ में संदर्भित किया गया है:

यदि पिन किसी भी चीज से जुड़ा नहीं है, तो digitalRead () HIGH या LOW (या इसे बेतरतीब ढंग से बदल सकता है) वापस कर सकता है।

यदि आप Arduino डिजिटल पिन ट्यूटोरियल को देखते हैं :

हालांकि, इसका मतलब यह भी है कि इनपुट पिन उनके साथ जुड़े कुछ भी नहीं है, या उनके साथ जुड़े तारों के साथ जो अन्य सर्किट से जुड़े नहीं हैं, पिन राज्य में प्रतीत होने वाले यादृच्छिक परिवर्तनों की रिपोर्ट करेंगे, पर्यावरण से विद्युत शोर उठा सकते हैं, या कैपेसिटिव रूप से राज्य को युग्मित करेंगे। पास के पिन का।

यदि कोई इनपुट मौजूद नहीं है, तो अक्सर इनपुट पिन को ज्ञात अवस्था में रखना उपयोगी होता है। यह एक पुलअप रोकनेवाला (+ 5 वी), या इनपुट पर एक पुलडाउन रोकनेवाला (जमीन के लिए अवरोध) को जोड़कर किया जा सकता है, जिसमें 10K एक सामान्य मूल्य है। एटमेगा चिप में निर्मित सुविधाजनक 20K पुलअप रेसिस्टर्स भी हैं जिन्हें सॉफ्टवेयर से एक्सेस किया जा सकता है। इन अंतर्निहित पुलअप प्रतिरोधों को निम्नलिखित तरीके से एक्सेस किया जाता है।

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

ये कमज़ोर पुल रेसिस्टर्स इनपुट पिन स्थिति को एक ज्ञात स्थिति में बाध्य करते हैं, और ग्राउंड या + 5 वी के सीधे कनेक्शन की तरह, मजबूत इनपुट वोल्टेज द्वारा आसानी से अधिलेखित हो जाते हैं।


2
कैसे जिक्र होगा pinMode(pin, INPUT_PULLUP)? यह याद रखना आसान है, और वास्तव में मुश्किल है।
piojo

6

यह सामान्य बात है। जब तक कोई इनपुट किसी चीज से जुड़ा नहीं होता है, तब तक वह हाई या लो या लगातार बदलता रहेगा। यह Arduino वेब साइट पर digitalRead reference पेज द्वारा वर्णित है ।

इनपुट पिन कुछ छोटे कैपेसिटेंस के साथ व्यवहार करता है, इसलिए संक्षेप में 3V3 या 5V से कनेक्ट करने पर कैपेसिटेंस चार्ज होगा। आप एक नंगे उंगली का उपयोग करके एक समान प्रभाव पा सकते हैं।

आप पिन और जीएनडी के बीच एक बड़ा मूल्य रोकनेवाला जोड़कर समस्या से बच सकते हैं।

अपने आप से पूछें कि आप शून्य की उम्मीद क्यों करते हैं?


1
pinMode (पिन, INPUT_PULLUP);
जिप्पी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.