प्रसंस्करण के साथ धारावाहिक संचार

प्रसंस्करण के साथ धारावाहिक संचार

प्रसंस्करण के साथ धारावाहिक संचार

सीरियल क्लास

धारावाहिक संचार का उपयोग करने के संचालन प्रसंस्करण कक्षा में परिभाषित किया गया है Serialकिसी प्रोग्राम में उनका उपयोग करने के लिए किया जाने वाला पहला ऑपरेशन (स्केच) इसे कोड में शामिल करना होगा import processing.serial.*;.

सामग्री की तालिका

    कक्षा Serial संकेतित मापदंडों के आधार पर इसमें पांच अलग-अलग कंस्ट्रक्टर हैं। एकमात्र आवश्यक पैरामीटर मूल वस्तु है (माता - पिता) जो आमतौर पर कक्षा के मुख्य प्रोग्राम (जैसे, प्रोग्राम विंडो) से मेल खाता है PApplet. जैसा कि आम तौर पर लिखा जा रहा प्रोग्राम पैरेंट होगा (द स्केच current), इस पहले अनिवार्य पैरामीटर का मान होगा this.

    अन्य पांच पैरामीटर जो कंस्ट्रक्टर को दिए जा सकते हैं वे हैं ① गति, ② सीरियल पोर्ट का नाम ③ समानता प्रोटोकॉल में उपयोग किया जाता है, ④ डेटा बिट्स और ⑤ स्टॉप बिट्स। आवश्यक मूल ऑब्जेक्ट के अलावा, सबसे अधिक बार पारित पैरामीटर, पोर्ट नाम और गति हैं।

    La धारावाहिक संचार गति एक पूर्णांक है (int) कि डिफ़ॉल्ट मान 9600 है यदि यह पैरामीटर कंस्ट्रक्टर को पास नहीं किया गया है।

    सीरियल पोर्ट उपलब्ध हैं. सूची विधि

    El बंदरगाह का नाम इसका स्वरूप सिस्टम द्वारा इस प्रकार निर्धारित किया जाता है, उदाहरण के लिए लिनक्स वितरण यह कुछ इस तरह होगा /देव/ttyS4 / देव / ttyACM3 o /देव/ट्टीयूएसबी1 (पोर्ट प्रकार के आधार पर), जबकि विंडोज़ पर यह कुछ इस तरह होगा COM12. जब तक कोई पोर्ट किसी डिवाइस के साथ भौतिक रूप से संबद्ध न हो, प्रोग्राम को आमतौर पर यह नहीं पता होगा कि किस पोर्ट का उपयोग करना है। पोर्ट का चयन करने का एक सामान्य तरीका उपलब्ध पोर्ट की एक सूची प्राप्त करना, उसे उपयोगकर्ता को दिखाना और उन्हें वह चुनने की अनुमति देना है जिसका वे उपयोग करना चाहते हैं। प्रक्रिया Serial.list() टेक्स्ट स्ट्रिंग्स का एक वेक्टर लौटाता है (String) सिस्टम पर उपलब्ध पोर्ट के नाम के साथ।

    लाइब्रेरी द्वारा डिफ़ॉल्ट रूप से उपयोग किया जाने वाला पोर्ट Serial विधि द्वारा लौटाए गए लोगों में से पहला है list (निश्चित रूप से COM1 विंडोज पर या /देव/ttyS0 en ग्नू / लिनक्स). बहुत सीमित संदर्भों को छोड़कर जिनमें हार्डवेयर के साथ काम किया जा रहा है वह सख्ती से ज्ञात है (जैसे कि कियोस्क मोड में एक सिस्टम), इसे आमतौर पर छोड़ा नहीं जाता है और गंतव्य पोर्ट को स्पष्ट रूप से इंगित किया जाता है।

    प्रोसेसिंग सीरियल लिनक्स सीरियल सूची पोर्ट ttyACM ttyS ttyUSB

    ऊपर दिया गया स्क्रीनशॉट एक सिस्टम का आउटपुट दिखाता है ग्नू / लिनक्स जिसमें चार सीरियल पोर्ट हैं RS-232 (ट्टीएस0 a ट्टीएस3) और दो प्रकार के पांच एडाप्टर (ttyACM0 a ttyACM1 y टीटीयूएसबी0 a टीटीयूएसबी2).

    Linux सीरियल डिवाइस अनुमतियाँ ttyACM ttyS ttyUSB

    सीरियल पोर्ट तक पहुंचने के लिए, उपयोगकर्ता को उस समूह से संबंधित होना चाहिए जिसके लिए सिस्टम उन्हें सामान्य रूप से असाइन करता है TTY o डायल करें. उपरोक्त छवि के स्क्रीनशॉट में आप देख सकते हैं कि सीरियल पोर्ट सूचीबद्ध हैं ls /dev/tty[ASU]* -la पेरटेनसेन अल ग्रुपो डायल करें जिन पर पढ़ने और लिखने की पहुंच की अनुमति है।

    सीरियल प्रोटोकॉल पैरामीटर

    La समानता धारावाहिक संचार का में व्यक्त किया गया है प्रसंस्करण एक पात्र के रूप में (char) जो मान ले सकता है: ① N (कोई नहीं) का पता नहीं लगाने के लिए समानता, ② E (भी) यह इंगित करने के लिए कि समता द्वियक सम है, ③ O (अजीब) यह इंगित करने के लिए कि समता द्वियक अजीब है, ④ M (निशान) हमेशा बनाने के लिए समता द्वियक और ⑤ S (अंतरिक्ष) हमेशा एक बनाने के लिए समता द्वियक. डिफ़ॉल्ट मान, यदि कंस्ट्रक्टर को पैरामीटर के रूप में पास नहीं किया गया है, है N (तब से समानता).

    की संख्या डेटा बिट्स, जो डिफ़ॉल्ट रूप से आठ है, उन बिट्स की संख्या को इंगित करता है जो नेट डेटा पेलोड (जिसे एक वर्ण या कभी-कभी एक शब्द कहा जाता है) बनाते हैं जो फ्रेम की प्रत्येक मूल इकाई में प्रसारित होता है। डेटा बिट्स की संख्या दर्शाने वाला पैरामीटर पूर्णांक के रूप में व्यक्त किया गया है (int).

    अंत में, पांचवां संभावित पैरामीटर अंतिम चिह्न की अवधि को इंगित करता है, जिसे इस प्रकार व्यक्त किया गया है स्टॉप बिट्स (स्टॉप बिट्स), जिसे एक संख्या के रूप में दर्शाया गया है तैरनेवाला स्थल (float) जो मान ले सकता है 1.0 (डिफ़ॉल्ट मान यदि पैरामीटर कंस्ट्रक्टर को पास नहीं किया गया है), 1.5एक 2.0.

    सीरियल वर्ग के निर्माता

    निम्नलिखित सूची पैरामीटरों के विभिन्न संयोजनों को दिखाती है जिन्हें क्लास कंस्ट्रक्टर को पास किया जा सकता है Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    धारावाहिक संचार समाप्त करें. रोकने की विधि.

    सीरियल पोर्ट जारी करने के लिए, इंस्टेंटियेट करते समय असाइन किया गया Serial, और यह कि अन्य सिस्टम एप्लिकेशन इसका उपयोग कर सकते हैं, संचार विधि के साथ समाप्त हो जाता है stop, जो पैरामीटर प्राप्त नहीं करता है।

    सीरियल पोर्ट के माध्यम से डेटा भेजें. लिखने की विधि

    डेटा भेजने के लिए, क्लास Serial de प्रसंस्करण पद्धति को सम्मिलित करता है write जिसके साथ ① टेक्स्ट स्ट्रिंग्स प्रसारित की जा सकती हैं (String), ② बाइट्स या ③ बाइट वैक्टर (byte[]). यह याद रखना दिलचस्प है byte en प्रसंस्करण (कम जावा) -128 और 127 के बीच एक पूर्णांक का प्रतिनिधित्व करता है और, डिफ़ॉल्ट रूप से, स्ट्रिंग एन्कोडिंग का उपयोग करते हैं utf-16.

    सीरियल पोर्ट से डेटा पढ़ें

    ताकि सीरियल पोर्ट के माध्यम से डेटा प्राप्त होने पर प्रोग्राम अन्य कार्य कर सके, इसमें स्टोर करना सामान्य है बफर जो डेटा आता है और उपयुक्त होने पर उसे पढ़ता है। हालाँकि आमतौर पर यह बहुत कुशल नहीं है, आप सभी उपलब्ध डेटा को लोड करने के लिए एप्लिकेशन को रोक सकते हैं; हालाँकि, सबसे आम बात यह होगी कि जानकारी आते ही उसे पढ़ें, या तो प्रत्येक पुनरावृत्ति में draw, जब एक निश्चित मात्रा उपलब्ध हो या एक विशेष कोड प्राप्त हुआ हो।

    बफ़र में उपलब्ध डेटा की मात्रा. उपलब्ध विधि

    यह जानने के लिए कि डेटा आ गया है या नहीं बफर शृंखला, विधि available इसमें पहले से संग्रहीत बाइट्स की संख्या लौटाता है बफर. किसी भी स्थिति में, रीड ऑपरेशंस एक विशेष मान लौटा सकते हैं (जैसे -1 o null) से डेटा लोड करने का प्रयास करते समय बफर खाली होने पर श्रृंखला.

    एक बार में एक बाइट लोड करें. पढने की विधि

    कक्षा की मुख्य विधियाँ Serial जिनका उपयोग सीरियल पोर्ट द्वारा प्राप्त जानकारी को पढ़ने के लिए किया जाता है, वे "प्रकार" के होते हैं read» जो उनके बीच भिन्न होता है, मुख्य रूप से, डेटा के प्रकार से जिसमें वे प्राप्त जानकारी प्रदान करते हैं।

    read सीरियल पोर्ट द्वारा प्राप्त बाइट्स को 0 और 255 के बीच मान के रूप में वितरित करने के लिए उपयोग किया जाता है। डेटा प्रकार के रूप में byte de प्रसंस्करण -128 और 127 के बीच की सीमा का प्रतिनिधित्व करता है न कि 0 और 255 के बीच, इसका उपयोग करना आवश्यक है int द्वारा लौटाई गई सीमा का प्रतिनिधित्व करने के लिए read. यदि आप साथ पढ़ने का प्रयास करते हैं read और बफर स्ट्रिंग खाली है, मान लौटाता है -1

    सीरियल पोर्ट से अक्षर पढ़ें. रीडचार विधि

    विधि readChar के समान है read लेकिन यह प्रारूप में एक मान लौटाता है char के बजाय एक int. आंतरिक रूप से, char en प्रसंस्करण (कम जावा) को दो बाइट्स के साथ संग्रहीत किया जाता है, पढ़ने पर लौटने के लिए चुना गया मान readChar द्वारा बफर खाली श्रृंखला है 0xFFFF o -1.

    एक टेक्स्ट स्ट्रिंग लोड करें. readString और readStringUntil विधियाँ।

    विधि readString एक वस्तु लौटाता है String में उपलब्ध सभी डेटा से बना है बफर परामर्श के समय श्रृंखला।

    विधि readString यह मानते हुए टेक्स्ट स्ट्रिंग बनाता है कि सीरियल पोर्ट द्वारा प्राप्त बाइट्स प्रारूप में हैं ASCII इसलिए इस पढ़ने की विधि का उपयोग अन्य एन्कोडिंग के लिए नहीं किया जा सकता है।

    यदि यह पढ़ने के बारे में है बफर के साथ श्रृंखला readString खाली होने पर, रिटर्न मान होता है null.

    विधि readStringUntil इसमें जोड़ें readString में लोड की गई जानकारी वापस करने की क्षमता बफर श्रृंखला इसे एक विशेष वर्ण (कोड) द्वारा विभाजित करती है जिसे एक पैरामीटर के रूप में पारित किया जाता है। प्राप्त जानकारी को पढ़ने का यह तरीका हमें विभाजक और टर्मिनेटर दोनों को अलग करने की अनुमति देता है जो प्राप्त जानकारी की व्याख्या करने में मदद करते हैं।

    विधि readStringUntil वापिस लाओ null जब में बफर श्रृंखला को दिए गए तर्क (एक बाइट) में निर्दिष्ट कोड नहीं मिलता है।

    के लिए निम्नलिखित कोड में Arduino सीरियल पोर्ट के माध्यम से तीन संदेश भेजता है। पहले दो एक टैब में समाप्त होते हैं, इसलिए वे कंसोल में दिखाई देंगे। प्रसंस्करण, जबकि तीसरा, हालांकि इसे सीरियल पोर्ट के माध्यम से भेजा जाएगा, इसके साथ पढ़ा नहीं जाएगा readStringUntil(9) चूंकि यह एक टैब (कोड के साथ) में समाप्त नहीं होता है ASCII 9)।

    सीरियल स्ट्रिंग पढ़ने तक सीरियल.रीडस्ट्रिंग को संसाधित करना

    डेटा ब्लॉक पढ़ें. रीडबाइट्स और रीडबाइट्सअनटिल विधियाँ।

    ऊपर देखी गई विधियों का उपयोग विशिष्ट प्रारूपों के साथ डेटा को पढ़ने के लिए, कच्चे डेटा के ब्लॉक को पढ़ने के लिए या किसी ऐसे प्रारूप के साथ किया जाता है जो इसमें प्रदान नहीं किया गया है प्रसंस्करण तरीकों का प्रयोग किया जाता है readBytes y readBytesUntil

    विधि readBytes में उपलब्ध डेटा को पढ़ने का प्रयास करें बफर शृंखला। यदि विधि में कोई पैरामीटर पास नहीं किया गया है readBytes सभी उपलब्ध डेटा को एक वेक्टर में पढ़ा और लौटाया जाता है (byte[]). यदि एक पूर्णांक को एक पैरामीटर के रूप में पारित किया जाता है, तो इस संख्या द्वारा इंगित बाइट्स की अधिकतम संख्या पढ़ी जाती है और उन्हें एक वेक्टर के रूप में भी लौटाया जाता है।

    उपयोग करने का एक तीसरा तरीका है readBytes, अधिक कुशल, जो एक तर्क के रूप में एक बाइट वेक्टर लेता है जिसमें की सामग्री बफर शृंखला। उपयोग करने का यह तरीका readBytes एक पूर्णांक लौटाता है (int) जो पढ़े गए बाइट्स की संख्या को दर्शाता है।

    विधि readBytesUntil समान तरीके से काम करता है लेकिन इसमें पहला पैरामीटर शामिल होता है जो बाइट के मान का प्रतिनिधित्व करता है, यदि पाया जाता है बफर, पढ़ने के अंत का संकेत देगा। इस पद्धति में, वह पैरामीटर जो पढ़े जाने वाले बाइट्स की अधिकतम संख्या निर्धारित करता है, उसका कोई मतलब नहीं है क्योंकि मात्रा विशेष कोड द्वारा निर्धारित की जाएगी।

    विधि के संचालन का परीक्षण करने के लिए readBytes आइए निम्नलिखित कोड मान लें Arduino जो सीरियल पोर्ट के माध्यम से एक टेक्स्ट भेजता है।

    के लिए निम्नलिखित उदाहरण कार्यक्रम प्रसंस्करण 32-बाइट ब्लॉक में सीरियल पोर्ट से टेक्स्ट पढ़ता है (कुल_बाइट्स). यह सत्यापित करने के लिए कि यह काम करता है, यह इसे कंसोल के माध्यम से वर्णों के रूप में दिखाता है, प्राप्त बाइट्स के प्रकार को मजबूर करता है char.

    निम्नलिखित स्क्रीनशॉट में आप देख सकते हैं कि वे कंसोल में कैसे प्रदर्शित होते हैं प्रसंस्करण वह डेटा जो (अधिकतम) 32 बाइट्स के ब्लॉक में लोड किया गया है (कुल_बाइट्स) हर बार। लेकिन एक समस्या है जिसके बारे में पहले ही बात की जा चुकी है: Arduino की कविताएँ भेजता रहा हूँ Federico Garcia Lorca उदाहरण के प्रारूप में पाठ के रूप में एन्कोड किया गया UTF-8, जिसका उपयोग नहीं किया गया है प्रसंस्करण (जावा), आप क्या करना चाहते हैं utf-16 इसलिए जो लोग रैंक के अनुरूप नहीं हैं ASCII मुद्रण योग्य की गलत व्याख्या की गई है।

    प्रोसेसिंग सीरियल.रीडबाइट्स यूटीएफ-16

    इस समस्या को हल करने के लिए, वर्ण सेट लोड किया जा सकता है (चारसेट) और एक नई वस्तु को परिभाषित करें String इसे एन्कोडिंग के साथ प्रस्तुत करने के लिए बाध्य किया जा रहा है UTF-8 जैसा कि निम्नलिखित उदाहरण कोड में दिखाया गया है।

    प्रोसेसिंग सीरियल.रीडबाइट्स यूटीएफ-8

    प्राप्त नवीनतम डेटा पढ़ें. अंतिम और अंतिम चार विधियाँ।

    जबकि बाकी पढ़ने के तरीके ("प्रकार") read») वे की जानकारी लोड करते हैं बफर श्रृंखला उसी क्रम में है जिस क्रम में यह आई है (फीफो), इन दो तरीकों से आखिरी बाइट जो पहुंच गई है बफर शृंखला। प्रक्रिया last अंतिम बाइट का मान लौटाता है int y lastChar मान को a के रूप में लौटाता है char.

    सीरियल बफ़र प्रबंधन

    हालाँकि अब तक देखे गए तरीके पूरी तरह कार्यात्मक हैं, वे हमेशा सीरियल पोर्ट तक पहुंच का फायदा उठाने का सबसे अच्छा तरीका नहीं दर्शाते हैं। डेटा लोड करने के लिए, उन्हें समय-समय पर इसकी स्थिति की जांच करनी होगी बफर श्रृंखला बनाएं और कोड के दोहराए जाने वाले भाग में उपलब्ध डेटा पढ़ें। आम तौर पर अधिक प्रभावी तरीका यह है कि डेटा को केवल तभी पढ़ें जब आपको पता हो कि यह उपलब्ध है।

    डेटा प्राप्त होने पर सीरियल पोर्ट पढ़ें। धारावाहिक घटना.

    तक पहुँचने के लिए बफर सीरियल जब डेटा प्राप्त होता है, तो विधि परिभाषा के माध्यम से इसे प्रबंधित करके सीरियल इवेंट का फायदा उठाया जा सकता है serialEvent. यह विधि सीरियल पोर्ट का उपयोग करती है जो इसे एक तर्क के रूप में लॉन्च करती है।

    सीरियल बफ़र को आकार दें. बफ़र विधि.

    यदि आप उपयोगी डेटा के ब्लॉक को बनाने वाले बाइट्स की संख्या जानते हैं, तो आप डेटा पढ़ने की इस शैली को और अधिक अनुकूलित कर सकते हैं। बफर के माध्यम से श्रृंखला serialEvent. प्रक्रिया buffer आपको बाइट्स की संख्या निर्धारित करने की अनुमति देता है जिन्हें संग्रहीत किया जाएगा बफर एक सीरियल इवेंट लॉन्च करने से पहले। विधि एक पैरामीटर के रूप में एक पूर्णांक की अपेक्षा करती है जो बाइट्स की संख्या का प्रतिनिधित्व करती है।

    मान प्राप्त होने तक बफ़र भरें। बफ़रयूनटिल विधि।

    विधि कॉल सेट करने के बजाय serialEvent में डेटा की मात्रा के लिए बफरविधि के साथ, bufferUntil आप एक विशेष मान आने तक डेटा संग्रहीत करने के लिए कॉन्फ़िगर कर सकते हैं और फिर सीरियल ईवेंट बढ़ा सकते हैं। इस विधि को पारित पैरामीटर है a int जो कॉल द्वारा उत्पादित मूल्य का प्रतिनिधित्व करता है serialEvent.

    बफ़र में संग्रहीत डेटा हटाएँ। स्पष्ट विधि.

    विधि के साथ clear आप उस डेटा को हटा सकते हैं जो वर्तमान में है बफर. इस पद्धति का उपयोग किया जा सकता है, उदाहरण के लिए, पिछले डेटा से शेष डेटा को अनदेखा करते हुए एक नया डेटा रिसेप्शन सत्र शुरू करने के लिए।

    सीरियल पोर्ट के माध्यम से डेटा पढ़ने के लिए विशिष्ट प्रसंस्करण अनुप्रयोग

    अंत में, वस्तु के संचालन को दोबारा दोहराना सुविधाजनक है Serial de प्रसंस्करण जो आमतौर पर अधिक उपयोग किए जाते हैं, स्टैक्ड क्षेत्रों के इस मामले में, उनके साथ एक ग्राफ़ खींचने के लिए सीरियल पोर्ट के माध्यम से डेटा प्राप्त करने का एक विशिष्ट उदाहरण देखें।

    सीरियल लाइब्रेरी आयात करें

    डेटा प्रोटोकॉल (विभाजक) निर्धारित करें

    सीरियल क्लास का ऑब्जेक्ट निर्धारित करें

    उपयोग किए गए सीरियल पोर्ट को सेट करके सीरियल क्लास ऑब्जेक्ट को इंस्टेंट करें

    सीरियल पोर्ट बफ़र कॉन्फ़िगर करें

    सीरियल इवेंट के लिए एक हैंडलर लागू करें

    सीरियल बफ़र पढ़ें

    प्राप्त डेटा को कंडीशन करें

    धारावाहिक संचार समाप्त करें

    नीचे दिया गया उदाहरण कोड इस सारांश को एक कार्यात्मक (यद्यपि बहुत सरल) एप्लिकेशन के साथ दिखाता है जो सीरियल पोर्ट के माध्यम से प्राप्त मूल्यों के साथ एक क्षेत्र ग्राफ उत्पन्न करता है, जो कि निम्नलिखित एनीमेशन के समान है।

    सीरियल पोर्ट के माध्यम से प्राप्त डेटा के साथ प्रसंस्करण के साथ ग्राफिक

    कार्यक्रम के बाकी हिस्सों में खो जाने से बचने के लिए और क्रमिक संचार पर ध्यान केंद्रित करने के लिए प्रसंस्करण, कोड की पंक्तियाँ जो पिछले ऑपरेशन से मेल खाती हैं, हाइलाइट की गई हैं।

    टिप्पणी पोस्ट

    आप चूक गए होंगे