2008-10-12 14 views
5

मेरे पास एक अर्धिनो है जो एक सीरियल पोर्ट के माध्यम से एक पायथन स्क्रिप्ट के साथ निर्देश भेज रहा है और प्राप्त कर रहा है।जांचें कि क्या सीरियल पोर्ट सुन रहा है

Arduino एक बटन स्थिति लेता है और जब इसे धक्का दिया जाता है, तो यह सीरियल पोर्ट के माध्यम से एक पायथन लिपि में एक संदेश भेजेगा और प्रतिक्रिया का इंतजार करेगा। (Serial.available() के माध्यम से)। यह काफी अच्छी तरह से काम करता है।

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

क्या मेरे Arduino के लिए सीरियल पोर्ट पर कुछ सुनने के लिए कोई तरीका है? (और चमकती रोशनी के साथ मुझे सतर्क करें, आदि यदि नहीं) या यह नहीं है कि धारावाहिक कैसे काम करता है? सबसे खराब मामला मुझे लगता है कि मैं एक टाइमआउट का उपयोग कर सकता हूं, हालांकि यह आदर्श नहीं है।

उत्तर

6

आपके पास यह पता लगाने की सीमित क्षमता है कि डीएसआर/डीटीआर पिन का उपयोग करके दूसरी तरफ कुछ सुन रहा है या नहीं।

जब आप मशीन पर सीरियल पोर्ट खोलते हैं तो आपकी स्क्रिप्ट चलती हैं, इसे अपने डीटीआर पिन को बढ़ाया जाना चाहिए (या आप इसे ऐसा करने के लिए मनाने में सक्षम होना चाहिए: जिस पुस्तकालय का उपयोग आप COM पोर्ट को चलाने के लिए करते हैं आपको बताओ कैसे)।

फिर, अपने Arduino पर, आप नियमित अंतराल पर अपने डीएसआर पिन (हैंडशेकिंग के साथ नल-मॉडेम तारों को मानते हुए, जहां पीसी डीटीआर पिन डीएसआर + सीडी को वार्ड किया जाता है) को नियमित अंतराल पर देख सकते हैं, और 'कोई भी कनेक्ट नहीं' 'परिदृश्य किसी भी तरह से आप फिट देखते हैं।

इस दृष्टिकोण के साथ एक समस्या यह है कि आपकी पीसी स्क्रिप्ट सीरियल पोर्ट को बंद नहीं कर सकती है जब यह क्रैश/प्रतिक्रिया देना बंद कर देती है, जिससे डीटीआर पिन सक्षम हो जाता है जैसे सब कुछ ठीक है। साथ ही, आपकी स्क्रिप्ट सीरियल लाइन पर त्रुटियों के कारण Arduino से संदेश को याद कर सकती है।

इसी कारण से, आपको हमेशा अपने प्राप्त दिनचर्या में एक टाइमआउट लागू करना चाहिए: भले ही कोई पार्टी दूसरी छोर पर सुन रही हो, फिर भी कोई गारंटी नहीं है कि यह आपका संदेश प्राप्त हुआ है (या यह कि आपकी प्रतिक्रिया आपके पास पहुंच जाएगी बरकरार)।

यदि कोई टाइमआउट होता है तो आपका प्रोटोकॉल अधिक विश्वसनीय बनाता है तो कम से कम एक बार संदेश (डीएसआर उठाया जाता है) को दोबारा भेजना।

+0

चीयर्स साथी। एक दिलचस्प बिंदु के रूप में, Google ने इसे पोस्ट करने के 3 मिनट बाद अपना उत्तर उठाया। – Hyposaurus

+0

जेफ एटवुड ने कहा कि Google इस साइट पर लगभग 50% यातायात है। (डैंग को ट्वीट नहीं मिल रहा है, मेरा google foo आज काम नहीं कर रहा है) –

+0

हे शुरुआती संकेत के लिए धन्यवाद, लेकिन दुर्भाग्यवश मुझे आगे पाने के लिए और अधिक नहीं मिल रहा है। क्या आप कुछ उदाहरण कोड प्रदान कर सकते हैं कि Arduino के लिए डीएसआर पिन तक पहुंच कैसे प्राप्त करें? चीयर्स! – RngTng

0

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

1

Arduino डीएसआर लाइन या किसी अन्य हैंडशेकिंग लाइन का उपयोग नहीं करता है, इसलिए आप जो भी सुझाव देते हैं वह नहीं कर सकते हैं।

संबंधित मुद्दे