analogRead (0) या analogRead (A0)


14

Arduino संदर्भ बताता है कि आप एनालॉग पिन # 5 से मान पढ़ने के लिए निम्न कोड का उपयोग करेंगे:

int val1 = analogRead(5);

हालाँकि डिजिटल पिन # 5 से पढ़ने के लिए, आप उसी पिन नंबर को पास करेंगे digitalRead:

int val2 = digitalRead(5);

आप के analogRead(A5)बजाय का उपयोग नहीं करना चाहिए analogRead(5)?

यदि नहीं, तो निम्न कोड क्या करता है:

int val3 = analogRead(A5);

जवाबों:


28

टिलो के विशिष्ट सवालों के जवाब देने के लिए:

analogRead(5)और digitalRead(5)दो अलग-अलग स्थानों से पढ़ेंगे। पूर्व एनालॉग चैनल से पढ़ेगा 5या A5बाद वाला पिन 5 से पढ़ेगा जो डिजिटल पिन होता है। तो हाँ, यदि आप एक एनालॉग पिन पढ़ना चाहते हैं तो आपको digitalReadउपयोग करना चाहिए A5

क्यों?

analogReadआंतरिक रूप से एक चैनल नंबर की आवश्यकता होती है, लेकिन यह आपको पिन नंबर भी दे देगा। यदि आप इसे एक पिन नंबर देते हैं तो यह इसे इसके संबंधित चैनल नंबर में बदल देगा। जहां तक ​​मैं बता सकता हूं analogReadकि केवल एक फ़ंक्शन है जो आंतरिक रूप से एक चैनल नंबर का उपयोग करता है, एक चैनल नंबर की अनुमति देने के लिए केवल एक ही है, और इस अनजाने पिन-टू-चैनल रूपांतरण के साथ एकमात्र फ़ंक्शन है। इसे समझने के लिए आइए कुछ उदाहरणों के साथ शुरुआत करते हैं।

यदि आप analogReadपहले एनालॉग पिन पर उपयोग करना चाहते A0हैं तो आप कर सकते हैं analogRead(0)जो चैनल नंबर analogRead(A0)का उपयोग करता है या जो पिन नंबर का उपयोग करता है। यदि आप पिन नंबर संस्करण का उपयोग करने के लिए थे, analogReadतो पिन नंबर A0को उसके उचित चैनल नंबर में बदल देगा 0

यदि आप digitalWriteपहले एनालॉग पिन पर उपयोग करना चाहते हैं तो आप केवलA0 कर सकते हैं । आंतरिक रूप से एनालॉग चैनलों का उपयोग नहीं करता है और आपको इसे चैनल नंबर पास नहीं करने देता है। ठीक है, यह आपको जाने देगा लेकिन आप गलत पिन का चयन करेंगे। वही लागू होता है और यहां तक ​​कि ।digitalWrite(A0, x)digitalWritedigitalReadanalogWrite

पिन-टू-चैनल रूपांतरणों के बारे में क्या किया है analogRead? उस फ़ंक्शन का स्रोत hardware/arduino/avr/cores/arduino/wiring_analog.cआप देख सकते हैं कि यह बोर्ड प्रकार के आधार पर कुछ सरल घटाव करता है। A0/ A1/ A2/ आदि। स्थिरांक एनालॉग चैनलों के पिन नंबर का प्रतिनिधित्व करते हैं और हर जगह इस्तेमाल किया जा सकता है जो आपको एनालॉग इनपुट को संदर्भित करने की आवश्यकता है। इस कारण से वे आपके Arduino कोड में उपयोग करने के लिए सबसे अच्छा विकल्प हैं क्योंकि यह बहुत स्पष्ट है कि आप एक ही भौतिक पोर्ट का उपयोग कर रहे हैं तब भी जब आप विभिन्न कार्यों के लिए उपयोग कर रहे हैं। उन स्थिरांक की परिभाषाएं आपके बोर्ड पर निर्भर करती हैं।

उदाहरण के लिए, यहाँ Arduino Uno के लिए एनालॉग पिन डेफिनेशन कोड है hardware/arduino/avr/variants/standard/pins_arduino.h

static const uint8_t A0 = 14;
static const uint8_t A1 = 15;
static const uint8_t A2 = 16;
static const uint8_t A3 = 17;
static const uint8_t A4 = 18;
static const uint8_t A5 = 19;
static const uint8_t A6 = 20;
static const uint8_t A7 = 21;

तुलना के लिए यहाँ Arduino मेगा के लिए एनालॉग पिन परिभाषा कोड है:

static const uint8_t A0 = 54;
static const uint8_t A1 = 55;
static const uint8_t A2 = 56;
[...]
static const uint8_t A13 = 67;
static const uint8_t A14 = 68;
static const uint8_t A15 = 69;

एनालॉग पिन पर आगे ईई चर्चा: क्या मैं डिजिटल के रूप में अपनी परियोजना के लिए Arduino पर एनालॉग पिन का उपयोग कर सकता हूं?


1
हालाँकि, यह बिल्कुल वैसा ही था जैसा आपने समझाया था, मैं सिर्फ अर्डुइनो संदर्भ से भ्रमित हो गया, जिसमें गलत जानकारी है।
टिलो

1
इसके अलावा, आप कर सकते हैं केवल करना analogReadएनालॉग पिनों पर! दूसरी ओर, analogWriteएनालॉग और PWM पिन दोनों पर इस्तेमाल किया जा सकता है।
टिलो

1
@Tyilo मैंने स्रोत कोड से ली गई कुछ और सटीक जानकारी के साथ अपनी प्रतिक्रिया अपडेट की।
केविन मार्क

3
analogWrite () किसी भी पिन पर कहा जा सकता है, लेकिन यह केवल PWM पिन पर कुछ करता है। नॉन-पीडब्लूएम डायस्टैनल पिन और सभी एनालॉग पिन पर, यह बस डिजिटलवेट () कहता है।
बाल्डेंगाइनर

3
@powtac - यह आमतौर पर स्वीकार किया जाता है कि arduino प्रलेखन काफी घिनौना है, कम से कम यहाँ के आसपास। ऐसा महसूस न करें कि आप कुछ याद कर रहे हैं, यह आप नहीं हैं, यह लोग हैं।
कॉनर वुल्फ

3

मैंने इस पर घंटों बिताए। मुझे लगा कि मुझे हार्डवेयर की समस्या है। यह पता चला है कि मैं analogRead()गलत तरीके से कॉल कर रहा था ।

गलत ( DFRobot Incor से गलत नमूना कोड ):

val = analogRead(0); //connect sensor to Analog 0

सही बात:

val = analogRead(A0); //connect sensor to Analog 0

अपडेट : analogRead()GPIO पिन नंबर लेता है। A0आदि Arduino पिन नंबर के लिए #defines हैं, जहां A0 == 36

सावधान रहें: उदाहरण के लिए, FireBelele ESP32 पर, "IO36 / A0" (GPIO36) लेबल वाला पिन Arduino के बराबर है A0, लेकिन "IO39 / A1" (GPIO39) Arduino A3(नहीं A1), "IO34 / A2" (GPIO34) के बराबर Arduino A6(नहीं A2) के बराबर है। , आदि।

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