Arduino विलंब फ़ंक्शन, और आपको इसका उपयोग क्यों नहीं करना चाहिए

Arduino विलंब फ़ंक्शन, और आपको इसका उपयोग क्यों नहीं करना चाहिए

जब आपने पहली बार शुरू किया था विकास करना सीखना के लिये अरुडिनो , आपने शायद ऐसा उत्पाद बनाया है जो कुछ इस तरह काम करता है:





आपके Arduino से कनेक्टेड सिंगल LED लाइट होगी। यह हर सेकंड या तो बंद और बंद हो जाएगा, और तब तक जारी रहेगा जब तक कि Arduino बंद नहीं हो जाता। यह है का 'हैलो वर्ल्ड' कार्यक्रम अरुडिनो , और पूरी तरह से दिखाता है कि कैसे कोड की कुछ पंक्तियाँ कुछ मूर्त बना सकती हैं।





मैं यह भी शर्त लगाने को तैयार हूं कि आप इसका इस्तेमाल करते हैं विलंब() प्रकाश के चालू और बंद होने के बीच के अंतराल को परिभाषित करने के लिए कार्य करता है। लेकिन यहाँ एक बात है: जबकि Arduino कैसे काम करता है, इसके बुनियादी प्रदर्शनों के लिए देरी आसान है, आपको वास्तव में वास्तविक दुनिया में इसका उपयोग नहीं करना चाहिए। यहाँ क्यों है - और इसके बजाय आपको क्या उपयोग करना चाहिए।





विलंब () कैसे काम करता है

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

लेकिन समस्या यह है कि विलंब() फ़ंक्शन आपके प्रोग्राम को प्रतीक्षा करने का एक अच्छा तरीका नहीं है, क्योंकि इसे 'ब्लॉकिंग' फ़ंक्शन के रूप में जाना जाता है।



अगर आपका फोन टैप हो जाए तो क्या करें

अवरुद्ध और गैर-अवरुद्ध कार्यों के बीच अंतर

यह समझाने के लिए कि ब्लॉकिंग फंक्शन खराब क्यों हैं, मैं चाहता हूं कि आप रसोई में दो अलग-अलग शेफ की कल्पना करें: हेनरी ब्लॉकिंग , तथा एडुआर्डो नॉनब्लॉकिंग . दोनों एक ही काम करते हैं, लेकिन बेतहाशा अलग तरीके से।

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





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

यह एक मूर्खतापूर्ण सादृश्य है, लेकिन यह बिंदु को दिखाता है।





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

विशेष रूप से, यदि आपके एप्लिकेशन को आपको संलग्न सेंसर से लगातार डेटा प्राप्त करने की आवश्यकता है, तो आपको इसका उपयोग करने से बचने के लिए सावधानी बरतनी चाहिए विलंब() कार्य, क्योंकि यह बिल्कुल रुक जाता है हर चीज़ .

सौभाग्य से, विलंब() Arduino के लिए कोडिंग करते समय अपने प्रोग्राम को प्रतीक्षा करने का एकमात्र तरीका नहीं है।

मिलिस से मिलें ()

NS मिली () फ़ंक्शन एक ही कार्य करता है। जब बुलाया जाता है, तो यह वापस आ जाता है (जैसा कि a लंबा डेटाटाइप) मिलीसेकंड की संख्या जो प्रोग्राम को पहली बार लॉन्च किए जाने के बाद से बीत चुके हैं। तो, यह उपयोगी क्यों है?

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

अब देखते हैं कि यह Arduino के साथ कैसे काम करता है।

यह कार्यक्रम - जो काफी हद तक पर आधारित है आधिकारिक Arduino दस्तावेज़ों में से एक - पिछले रिकॉर्ड किए गए समय को वर्तमान समय से घटाकर काम करता है। यदि शेष (अर्थात पिछली बार रिकॉर्ड किए गए समय के बाद से बीता हुआ समय) अंतराल (इस मामले में, 1000 मिलीसेकंड) से अधिक है, तो प्रोग्राम अपडेट करता है पिछला समय वर्तमान समय के लिए परिवर्तनशील, और या तो एलईडी को चालू या बंद कर देता है।

इंस्टाग्राम पीसी पर डीएमएस कैसे देखें

और क्योंकि यह एक गैर-अवरुद्ध है, कोई भी कोड जो पहले उसके बाहर स्थित है अगर बयान सामान्य रूप से काम करना चाहिए।

सरल, है ना? ध्यान दें कि हमने वेरिएबल कैसे बनाया वर्तमान समय एक के रूप में अहस्ताक्षरित लंबा। एक अहस्ताक्षरित मूल्य का सीधा सा अर्थ है कि यह कभी भी ऋणात्मक नहीं हो सकता; हम ऐसा इसलिए करते हैं ताकि हम जितनी ज्यादा से ज्यादा संख्या स्टोर कर सकें वह बड़ी हो। डिफ़ॉल्ट रूप से, संख्या चर पर हस्ताक्षर किए जाते हैं, जिसका अर्थ है कि उस चर के लिए एक 'बिट' मेमोरी का उपयोग यह संग्रहीत करने के लिए किया जाता है कि मान सकारात्मक है या नकारात्मक। यह निर्दिष्ट करके कि यह केवल सकारात्मक होगा, हमारे पास खेलने के लिए एक अतिरिक्त बिट है।

बीच में आता है

अब तक, हमने अपने Arduino प्रोग्राम में टाइमिंग तक पहुंचने के एक तरीके के बारे में सीखा है जो कि . से बेहतर है विलंब() . लेकिन एक और, बहुत बेहतर तरीका है, लेकिन अधिक जटिल है: बीच में आता है . ये आपको अपने Arduino प्रोग्राम को ठीक से समय देने की अनुमति देते हैं, और बाहरी इनपुट पर तुरंत प्रतिक्रिया देते हैं, लेकिन एक अतुल्यकालिक तौर - तरीका।

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

जब कोई व्यवधान ट्रिगर होता है, तो यह या तो प्रोग्राम को रोक देता है, या एक फ़ंक्शन को कॉल करता है, जिसे आमतौर पर an . के रूप में जाना जाता है इंटरप्ट हैंडलर या फिर इंटरप्ट सर्विस रूटीन . एक बार यह समाप्त हो जाने के बाद, कार्यक्रम फिर से वही हो जाता है जो वह जा रहा था।

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

यह गूढ़ लगता है। भ्रमित, यहां तक ​​​​कि। लेकिन ऐसा नहीं है। यह देखने के लिए कि वे कैसे काम करते हैं, और उनके कुछ उदाहरण वास्तविक दुनिया में उपयोग किए जा रहे हैं, Arduino दस्तावेज़ को हिट करें .

ब्लॉक न करें

का उपयोग करते हुए मिली () स्वीकार्य रूप से उपयोग करने की तुलना में थोड़ा अतिरिक्त काम लेता है विलंब() . लेकिन मेरा विश्वास करो, आपके कार्यक्रम इसके लिए आपको धन्यवाद देंगे, और आप इसके बिना Arduino पर मल्टीटास्किंग नहीं कर सकते।

यदि आप का एक उदाहरण देखना चाहते हैं मिली () एक वास्तविक दुनिया के Arduino प्रोजेक्ट में उपयोग किया जाता है, जेम्स ब्रूस की Arduino नाइट लाइट और सनराइज अलार्म देखें।

कोई अन्य अवरोधन कार्य मिला जिससे हमें सावधान रहना चाहिए? मुझे नीचे टिप्पणी में बताएं, और हम चैट करेंगे।

फ़ोटो क्रेडिट: अरुडिनो (डैनियल जासूस) , अध्यक्ष (ओली स्वेन्सन)

साझा करना साझा करना कलरव ईमेल क्या यह विंडोज 11 में अपग्रेड करने लायक है?

विंडोज़ को नया रूप दिया गया है। लेकिन क्या यह आपको विंडोज 10 से विंडोज 11 में शिफ्ट होने के लिए मनाने के लिए काफी है?

आगे पढ़िए
संबंधित विषय
  • DIY
  • प्रोग्रामिंग
  • अरुडिनो
लेखक के बारे में मैथ्यू ह्यूजेस(386 लेख प्रकाशित)

मैथ्यू ह्यूजेस लिवरपूल, इंग्लैंड के एक सॉफ्टवेयर डेवलपर और लेखक हैं। वह शायद ही कभी अपने हाथ में एक कप मजबूत ब्लैक कॉफी के बिना पाया जाता है और अपने मैकबुक प्रो और अपने कैमरे को बिल्कुल पसंद करता है। आप उनके ब्लॉग को http://www.matthewhughes.co.uk पर पढ़ सकते हैं और ट्विटर पर @matthewhughes पर उनका अनुसरण कर सकते हैं।

Xbox One पर गेम कैसे साझा करें
मैथ्यू ह्यूजेस की और फ़िल्में या टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें
श्रेणी Diy