अरुडिनो - बाधित

रुकावट Arduino के वर्तमान काम को रोकते हैं जैसे कि कुछ और काम किया जा सकता है।

मान लीजिए आप घर बैठे हैं, किसी के साथ बातचीत कर रहे हैं। अचानक टेलीफोन की घंटी बजी। आप चैट करना बंद कर देते हैं, और कॉलर से बात करने के लिए टेलीफोन उठाते हैं। जब आप अपना टेलीफ़ोनिक वार्तालाप समाप्त कर लेते हैं, तो आप टेलीफ़ोन बजने से पहले उस व्यक्ति के साथ चैटिंग करने जाते हैं।

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

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

महत्वपूर्ण विशेषताएं

इंटरप्ट के बारे में कुछ महत्वपूर्ण विशेषताएं इस प्रकार हैं -

  • व्यवधान विभिन्न स्रोतों से आ सकते हैं। इस मामले में, हम एक हार्डवेयर रुकावट का उपयोग कर रहे हैं जो डिजिटल पिंस में से एक पर एक राज्य परिवर्तन से चालू है।

  • अधिकांश Arduino डिज़ाइनों में क्रमशः डिजिटल I / O पिंस 2 और 3 के हार्ड-वायर्ड दो हार्डवेयर इंटरप्ट होते हैं (जिन्हें "बाधा 0" और "इंटरप्ट 1" कहा जाता है)।

  • Arduino Mega में 21, 20, 19 और 18 पर पिन्स पर "इंटरप्ट 5" के माध्यम से अतिरिक्त इंटरप्ट ("इंटरप्ट 2") सहित छह हार्डवेयर इंटरप्ट हैं।

  • आप एक विशेष फ़ंक्शन का उपयोग कर एक दिनचर्या को परिभाषित कर सकते हैं जिसे "इंटरप्ट सर्विस सर्विस" कहा जाता है।

  • आप दिनचर्या को परिभाषित कर सकते हैं और बढ़ते किनारे, गिरने वाले किनारे या दोनों पर स्थितियां निर्दिष्ट कर सकते हैं। इन विशिष्ट स्थितियों में, व्यवधान को सेवित किया जाएगा।

  • यह संभव है कि फ़ंक्शन स्वचालित रूप से निष्पादित हो, हर बार एक घटना एक इनपुट पिन पर होती है।

व्यवधान के प्रकार

दो प्रकार के व्यवधान हैं -

  • Hardware Interrupts - वे एक बाहरी घटना की प्रतिक्रिया में होते हैं, जैसे कि एक बाहरी अवरोधक पिन उच्च या निम्न जा रहा है।

  • Software Interrupts- वे सॉफ्टवेयर में भेजे गए एक निर्देश के जवाब में होते हैं। "Arduino भाषा" का एकमात्र प्रकार का अवरोधक संलग्नक () फ़ंक्शन है।

Arduino में इंटरप्ट का उपयोग करना

Arduino कार्यक्रमों में व्यवधान बहुत उपयोगी होते हैं क्योंकि यह समय की समस्याओं को हल करने में मदद करता है। एक रुकावट का एक अच्छा अनुप्रयोग एक रोटरी एनकोडर पढ़ रहा है या एक उपयोगकर्ता इनपुट देख रहा है। आम तौर पर, एक ISR जितना संभव हो उतना छोटा और तेज़ होना चाहिए। यदि आपका स्केच कई ISR का उपयोग करता है, तो एक समय में केवल एक ही चल सकता है। अन्य व्यवधानों को वर्तमान एक के बाद एक क्रम में निष्पादित किया जाएगा जो कि उनकी प्राथमिकता पर निर्भर करता है।

आमतौर पर, वैश्विक चर का उपयोग आईएसआर और मुख्य कार्यक्रम के बीच डेटा पारित करने के लिए किया जाता है। यह सुनिश्चित करने के लिए कि ISR और मुख्य कार्यक्रम के बीच साझा किए गए चर सही ढंग से अपडेट किए गए हैं, उन्हें अस्थिर घोषित करें।

अटैचमेंट स्टेटमेंट सिंटैक्स

attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);//recommended for arduino board
attachInterrupt(pin, ISR, mode) ; //recommended Arduino Due, Zero only
//argument pin: the pin number
//argument ISR: the ISR to call when the interrupt occurs; 
   //this function must take no parameters and return nothing. 
   //This function is sometimes referred to as an interrupt service routine.
//argument mode: defines when the interrupt should be triggered.

निम्नलिखित तीन स्थिरांक मान्य मानों के रूप में पूर्वनिर्धारित हैं -

  • LOW जब भी पिन कम हो, तो बाधा को ट्रिगर करें।

  • CHANGE जब भी पिन मूल्य बदलता है, तो बाधा को ट्रिगर करना।

  • FALLING जब भी पिन ऊंचे से नीचे जाती है।

Example

int pin = 2; //define interrupt pin to 2
volatile int state = LOW; // To make sure variables shared between an ISR
//the main program are updated correctly,declare them as volatile.

void setup() {
   pinMode(13, OUTPUT); //set pin 13 as output
   attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);
   //interrupt at pin 2 blink ISR when pin to change the value
} 
void loop() { 
   digitalWrite(13, state); //pin 13 equal the state value
} 

void blink() { 
   //ISR function
   state = !state; //toggle the state when the interrupt occurs
}