2012-09-14 11 views
14

मेरे पास एक Arduino है और मैं सोच रहा हूं कि वास्तविक मूल्यों के रूप में वास्तव में क्या उच्च और निम्न मतलब है ... क्या वे इनट्स पर हस्ताक्षर किए हैं? बिना हस्ताक्षर किए गए इनट्स? बिना हस्ताक्षर किए गए अक्षर ??? उनके मूल्य क्या हैं? मैं अनुमान लगा रहा हूं कि उच्च और निम्न क्रमशः 1 और 0 पर सेट की गई सभी बिट्स के साथ हस्ताक्षरित इंक हैं, लेकिन मुझे यकीन नहीं है। मैं उच्च और निम्न का उपयोग करके बिटवॉयर ऑपरेशंस करने में सक्षम होना चाहता हूं या डिजिटल या्राइट के अलावा उच्च या निम्न के अलावा मूल्यों को पास करना चाहता हूं। इसके अलावा, मैं उच्च या निम्न के लिए एक पूर्णांक कैसे डालेगा ताकि मैं यह कर सकूं?Arduino HIGH LOW

#define HIGH 0x1 
#define LOW 0x0 

अर्थ, इन परिभाषित करता है हेक्साडेसिमल पूर्णांक मूल्यों जा रहा है, आप कर सकते हैं आप के साथ चाहते हैं जो कुछ भी बिटवाइज़ संचालन:

उत्तर

10

आप digitalWrite को अन्य मूल्यों पास करना चाहते हैं() आप समारोह प्रोटोटाइप

void digitalWrite(uint8_t, uint8_t); 

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

चूंकि उच्च और निम्न केवल परिभाषित स्थिरांक हैं, इसलिए आप उन्हें एक पूर्णांक नहीं डाल सकते हैं (न ही वह ऑपरेशन समझ में आता है)। ऐसा लगता है कि आप कहीं भी एक पूर्णांक का उपयोग कर सकते हैं कि उच्च और निम्न की उम्मीद थी।

वास्तव में ऐसा करना एक बुरा विचार है, हालांकि कई कारणों से - उच्च और निम्न की परिभाषाएं बदल सकती हैं (संभावना नहीं है लेकिन संभव है) और यह एक प्रकार के परिप्रेक्ष्य से समझ में नहीं आता है। इसके बजाए, आपको यह निर्धारित करने के लिए अपने प्रोग्राम में तर्क का उपयोग करना चाहिए कि फ़ंक्शन कॉल में उच्च या निम्न पारित किया जाना चाहिए, और फिर वास्तव में निरंतर पास हो।

+1

वास्तव में:

दस्तावेज़ देखें। जहां तक ​​मुझे पता है, केवल उच्च और निम्न और सत्य और झूठी ... (उच्च = सत्य, कम = झूठी) – codeling

+0

टाइपो, इसके बारे में क्षमा करें, सत्य और गलत को Arduino के लिए कहीं भी परिभाषित नहीं किया गया है। – Ivan

+0

परिभाषित स्थिरांक राज्यों के ऊपर उत्तर दें। –

30

hardware/arduino/cores/arduino/Arduino.h पर (कम से कम Arduino 1.0.1 सॉफ्टवेयर में), लाइनों 18 और 19 एक नज़र उन्हें - हालांकि, कितना अर्थ होगा, इस समय मुझे वास्तव में स्पष्ट नहीं है। यह भी ध्यान रखें कि ये मान बाद में परिवर्तन के अधीन हो सकते हैं - जो उन पर थोड़ा और अधिक मूर्खतापूर्ण संचालन करेगा।

14

मेरा 2 सी nyarlathotep उत्तर में जोड़ने के लिए। लाइन्स Arduino.h (1.0) के 18--25 हैं:

#define HIGH 0x1 
#define LOW 0x0 

#define INPUT 0x0 
#define OUTPUT 0x1 

#define true 0x1 
#define false 0x0 

इसलिए, HIGH<==>OUTPUT<==>true<==>0x1 और LOW<==>INPUT<==>false<==>0x0। फिर, HIGH<==>!LOW और LOW<==>!HIGH ...

+1

यह इतना अजीब बात है कि INPUT/OUTPUT पूरी तरह से उलट दिया जाता है (वैसे भी "सामान्य" विकास से AVR-GCC का उपयोग करके)।एवीआर एमसीयू के बारे में मेरी पसंदीदा चीजों में से एक यह था कि "1" एक "आई" (इनपुट के लिए) जैसा दिखता था, और "0" आउटपुट के लिए "ओ" जैसा दिखता था, जिसने इसे याद रखना बहुत आसान बना दिया। – BrainSlugs83

1

डिजिटलवाइट() के लिए पहला तर्क एक पिन नंबर है।

digitalWrite को दूसरा तर्क() या तो होगा:

1) एक उच्च लिखने (3.3 या 5v) या कम (0V) एक द्विआधारी उत्पादन या
2) उच्च) को निष्क्रिय करने के लिए सक्षम है (या करने के लिए (कम) एक बिनरी इनपुट पर आंतरिक पुलअप।

किसी भी तर्क के लिए बिटवाई ऑपरेशंस का कोई मतलब नहीं है। शायद आपको एनालॉगवाइट() का उपयोग करने की आवश्यकता है? digitalWrite()Constants

+0

उच्च, और निम्न क्रमशः संख्याएं (1, और 0) हैं। उन पर बिटवाई ऑपरेशंस कुल समझ में आता है। - डिजिटलवाइट के व्यवहार के लिए, दूसरा तर्क एक हस्ताक्षरित 8-बिट पूर्णांक है जिसे बूलियन के रूप में माना जाता है - इसलिए शून्य-शून्य के रूप में कुछ भी उच्च माना जाना चाहिए। – BrainSlugs83