Arduino सीरियल बफर को कैसे साफ़ करें

Arduino Siriyala Baphara Ko Kaise Safa Karem



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

Arduino सीरियल बफर

तो, हम सभी जानते हैं कि Arduino सीरियल संचार प्रोटोकॉल का उपयोग करके संचार करता है जिसे USART के रूप में जाना जाता है। हां, Arduino में SPI, I2C जैसे कुछ अन्य प्रोटोकॉल हैं लेकिन USART सबसे आम और अक्सर इस्तेमाल किया जाने वाला प्रोटोकॉल है। यदि आप तीनों प्रोटोकॉल Arduino को पढ़ने में रुचि रखते हैं, तो क्लिक करें यहां .







Arduino सीरियल बफ़र्स आने वाले सीरियल कैरेक्टर को इकट्ठा करते हैं और उन्हें तब तक होल्ड करते हैं जब तक कि माइक्रोकंट्रोलर उन्हें प्रोसेस नहीं कर सकता। सीरियल कम्युनिकेशन एक डिवाइस से दूसरे डिवाइस में डेटा ट्रांसफर करने की विधि है। Arduino अपने बोर्ड पर USART हार्डवेयर का उपयोग करके प्रत्येक 8 बिट को एक बाइट में असेंबल करता है। फिर इन बाइट्स को सीरियल बफर में स्टोर करें, Arduino सीरियल बफर के अंदर अधिकतम 64 बाइट्स स्टोर किए जा सकते हैं।



Arduino सीरियल बफर साफ़ करें

Arduino सीरियल बफ़र्स में डेटा स्टोर करने के लिए सीमित मेमोरी होती है, अगर सीरियल पिन पर मेमोरी ओवरफ्लो या बड़ी मात्रा में डेटा है, तो हमें आने वाले डेटा को स्टोर करने के लिए पहले सीरियल बफर को साफ़ करना होगा। आइए Arduino सीरियल बफर को साफ़ करने के संभावित तरीकों का पता लगाएं।



Arduino सीरियल बफर को साफ़ करने के तरीके

सीरियल बफर स्पेस को खाली करने के लिए ताकि इसे नए डेटा के साथ अपडेट किया जा सके, निम्नलिखित दो तरीके मददगार हो सकते हैं:





    • Serial.flush () फ़ंक्शन का उपयोग करके सीरियल बफर साफ़ करें
    • Serial.begin () फ़ंक्शन का उपयोग करके सीरियल बफर साफ़ करें

1: सीरियल.फ्लश () फ़ंक्शन का उपयोग करके सीरियल बफर साफ़ करें

तो, पहली विधि जो एक Arduino सीरियल बफर को साफ़ कर सकती है एक Serial.flush() फ़ंक्शन का उपयोग कर रही है। यह फ़ंक्शन Arduino सीरियल लाइब्रेरी फ़ंक्शन के अंतर्गत आता है।

सीरियल फ्लश ()

Arduino Serial.flush () फ़ंक्शन डेटा के पूरी तरह से प्रसारित होने की प्रतीक्षा करता है। आने वाले डेटा को छोड़ने के बजाय यह इसे प्रतीक्षा करने की अनुमति देता है ताकि एक बार बफर के अंदर डेटा पूरी तरह से प्रसारित हो जाए तो सीरियल बफर नया डेटा प्राप्त कर सकता है।



टिप्पणी : Serial.flush() प्रोग्राम का उपयोग करने के बाद सीरियल मॉनीटर पर आउटपुट को निष्पादित और प्रिंट करने में अधिक समय लग सकता है। अभी तक सभी डेटा प्रसारित होने के बाद Arduino कोड प्रतीक्षा करता है ताकि यह अपनी मेमोरी के अंदर नए डेटा को स्टोर कर सके।

वाक्य - विन्यास

सीरियल फ्लश ( )

मापदंडों

यह केवल एक पैरामीटर लेता है।

धारावाहिक: सीरियल पोर्ट ऑब्जेक्ट

रिटर्न

यह फ़ंक्शन कुछ भी नहीं देता है।

उदाहरण कोड

यहाँ वह कोड है जो Serial.flush () फ़ंक्शन का उपयोग किए बिना लिखा गया है:

व्यर्थ व्यवस्था ( ) {
सीरियल.शुरुआत ( 9600 ) ;
अहस्ताक्षरित लंबी मिली_फ्लशस्टार्ट = मिली ( ) ; /* वर्तमान Arduino घड़ी को सहेजकर कोड प्रारंभ करें समय */
सीरियल.प्रिंटln ( एफ ( 'Linuxhint.com/Arduino' ) ) ;
सीरियल.प्रिंटln ( एफ ( 'Linuxhint.com/RaspberryPi' ) ) ;
सीरियल.प्रिंटln ( एफ ( 'Linuxhint.com/ट्यूटोरियल' ) ) ;
अहस्ताक्षरित लंबी मिली_फ्लशस्टॉप = मिली ( ) ; /* वर्तमान समय इस समय */
सीरियल.प्रिंट ( एफ ( 'फ्लश फ़ंक्शन के बिना यह लेता है' ) ) ;
सीरियल.प्रिंट ( मिली_फ्लशस्टॉप - मिली_फ्लशस्टार्ट ) ; /* प्रिंटों समय डेटा प्रिंट करने के लिए सीरियल बफर द्वारा लिया गया */
सीरियल.प्रिंटln ( एफ ( 'मिलीसेकंड।' ) ) ;
}
शून्य लूप ( ) {
}


उपरोक्त कोड में हमने तीन अलग-अलग स्ट्रिंग्स को इनिशियलाइज़ किया और मिलिस () फंक्शन से करंट टाइम निकालकर कोड को एक नए वेरिएबल में सेव करके शुरू किया। एक बार जब डेटा फिर से मिलिस () फ़ंक्शन का उपयोग करके प्रिंट हो जाता है तो हम वर्तमान समय को एक नए चर में पास करते हैं।

एक बार दोनों समय दो चर के अंदर प्राप्त हो जाने के बाद, अंतर हमें Arduino द्वारा मिलीसेकंड में तीन परिभाषित तारों को मुद्रित करने के लिए लिया गया समय देगा।


आउटपुट टर्मिनल में यह देखा जा सकता है कि परिभाषित स्ट्रिंग को प्रिंट करने में 9ms लगते हैं।


अब नीचे दिए गए कोड में हम Serial.flush () फ़ंक्शन का उपयोग करेंगे जो सभी स्ट्रिंग्स को पास होने देगा और अगले डेटा को प्राप्त करने के लिए सीरियल बफर के स्पष्ट होने तक प्रतीक्षा करेगा। इसलिए, Serial.flush () का उपयोग किए बिना डेटा को प्रिंट करने की तुलना में इसमें अतिरिक्त समय लगेगा।

व्यर्थ व्यवस्था ( ) {
सीरियल.शुरुआत ( 9600 ) ;
अहस्ताक्षरित लंबी मिली_फ्लशस्टार्ट = मिली ( ) ; /* वर्तमान Arduino घड़ी को सहेजकर कोड प्रारंभ करें समय */
सीरियल.प्रिंटln ( एफ ( 'Linuxhint.com/Arduino' ) ) ;
सीरियल.प्रिंटln ( एफ ( 'Linuxhint.com/RaspberryPi' ) ) ;
सीरियल.प्रिंटln ( एफ ( 'Linuxhint.com/ट्यूटोरियल' ) ) ;
सीरियल फ्लश ( ) ; /* वेट्स के लिये उस फ्लश मेमोरी के बाद प्रेषित किया जाने वाला डेटा */
अहस्ताक्षरित लंबी मिली_फ्लशस्टॉप = मिली ( ) ; /* वर्तमान समय इस समय */
सीरियल.प्रिंट ( एफ ( 'फ्लश फंक्शन के साथ यह लेता है' ) ) ;
सीरियल.प्रिंट ( मिली_फ्लशस्टॉप - मिली_फ्लशस्टार्ट ) ; /* प्रिंटों समय डेटा प्रिंट करने के लिए सीरियल बफर द्वारा लिया गया */
सीरियल.प्रिंटln ( एफ ( 'मिलीसेकंड।' ) ) ;
}
शून्य लूप ( ) {
}


यह कोड वैसा ही है जैसा हमने पहले बताया था। यहां अंतर सीरियल.फ्लश () फ़ंक्शन है जो प्रोग्राम को कुछ अतिरिक्त समय तक प्रतीक्षा करने की अनुमति देता है जब तक कि सीरियल बफर मेमोरी अगले डेटा प्राप्त करने के लिए स्पष्ट न हो जाए।


आउटपुट में हम स्पष्ट रूप से देख सकते हैं कि इस बार तीन स्ट्रिंग्स को प्रिंट करने में 76ms का समय लगता है, जबकि पिछले वाले की तुलना में केवल 9ms लगते हैं।

2: Serial.begin () फ़ंक्शन का उपयोग करके सीरियल बफर साफ़ करें

अब तक हमने सीरियल बफ़र को साफ़ करने के लिए फ़ंक्शन Serial.flush () की व्याख्या की थी, लेकिन इस फ़ंक्शन को डेटा के पूरी तरह से प्रसारित होने की प्रतीक्षा करनी पड़ती है, अब यह सवाल दिमाग में आता है कि क्या हम सीरियल बफर के अंदर आने वाले डेटा को साफ़ करना चाहते हैं। प्रश्न का उत्तर सरल है: हम इसे a . का उपयोग करके कर सकते हैं जबकि सीरियल लाइब्रेरी फ़ंक्शन के साथ लूप।

वाक्य - विन्यास

जबकि ( सीरियल.उपलब्ध ( ) )
सीरियल.पढ़ें ( ) ;
सीरियल.अंत ( ) ;
सीरियल.शुरुआत ( 9600 ) ;

कोड

स्ट्रिंग वैल;
व्यर्थ व्यवस्था ( ) {
}
शून्य लूप ( ) {
यदि ( सीरियल.उपलब्ध ( ) ) { /* जांच के लिये सीरियल डेटा */
वैल = '' ;
जबकि ( सीरियल.उपलब्ध ( ) ) { /* पढ़ना सीरियल डेटा यदि उपलब्ध */
चारो सीरियल_डेटा = सीरियल.पढ़ें ( ) ;
वैल =वैल+सीरियल_डेटा; /* नई स्ट्रिंग के अंदर डेटा स्टोर करें */
}
सीरियल.प्रिंटln ( वैल ) ; /* प्रिंट करें पढ़ना जानकारी */
सीरियल.अंत ( ) ; /* धारावाहिक संचार समाप्त करें */
सीरियल.शुरुआत ( 9600 ) ; /* स्पष्ट सीरियल बफर */
}
}


Arduino Serial.begin() फ़ंक्शंस का उपयोग बॉड दर को परिभाषित करके सीरियल संचार को प्रारंभ करने के लिए करता है, एक बार यह फ़ंक्शन प्रारंभ हो जाने के बाद Arduino मेमोरी में पहले से संग्रहीत डेटा स्पष्ट हो जाता है। यहां हम सीरियल.उपलब्ध () फ़ंक्शन का उपयोग करके सीरियल डेटा की जांच करेंगे, एक बार डेटा पढ़ने के बाद यह एक नई स्ट्रिंग के अंदर स्टोर हो जाएगा और अंत में Serial.begin (9600) का उपयोग करके हम Arduino सीरियल बफर को साफ़ कर देंगे।

टिप्पणी: हमें सीरियल बफर को फ्लश करने की आवश्यकता है क्योंकि यह सुनिश्चित करता है कि डेटा डिवाइस पर भेज दिया गया है और भेजने के लिए प्रतीक्षा या होल्ड पर नहीं है।

निष्कर्ष

Arduino सीरियल बफर को साफ़ करने के लिए ताकि यह बफर मेमोरी के अंदर नया डेटा स्टोर कर सके Serial.flush() और Serial start का उपयोग किया जा सकता है। इसका उपयोग Arduino सीरियल बफर को साफ़ करने के लिए किया जा सकता है, लेकिन इससे बचने के लिए सभी डेटा प्रसारित होने के बाद हमें प्रतीक्षा करनी होगी, हम Serial.begin() फ़ंक्शन के साथ थोड़ी देर के लूप का उपयोग कर सकते हैं जो सीरियल बफर से आने वाले डेटा को भी साफ़ कर सकता है।