विषयसूची:

Arduino - आवधिक रुकावट: 4 कदम
Arduino - आवधिक रुकावट: 4 कदम

वीडियो: Arduino - आवधिक रुकावट: 4 कदम

वीडियो: Arduino - आवधिक रुकावट: 4 कदम
वीडियो: load cell using arduino 2024, जुलाई
Anonim
Arduino - आवधिक रुकावट
Arduino - आवधिक रुकावट

यह निर्देश Arduino कार्यक्रमों में समय के लिए एक आवधिक रुकावट का उपयोग करने के बारे में है। यह एक नवोदित Arduino प्रोग्रामर के लिए एक कदम है जो जानता है कि Arduino अधिक कर सकता है, लेकिन यह नहीं जानता कि ऐसा कैसे किया जाए।

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

चरण 1: इंटरप्ट हैंडलर

1. अपने प्रोग्राम में इंटरप्ट हैंडलर जोड़ें। बस सेटअप के ऊपर कहीं कॉपी और पेस्ट करें ();

कास्ट अहस्ताक्षरित लंबा TIMER0_COUNT = 500; // 500 मिसे टाइमर अंतराल

// TIMER0 इंटरप्ट हैंडलर अस्थिर बूल टाइम = झूठा; ISR (TIMER0_COMPA_vect) {स्थिर अहस्ताक्षरित लंबी गणना = 0; अगर (++गिनती> TIMER0_COUNT) {गिनती = 0; समय = सच; // समय हर TIMER0_COUNT ms पर सही पर सेट होता है } // (मुख्य दिनचर्या में समय को साफ करने की आवश्यकता होती है) }

चरण 2: आवधिक समय अंतराल सेट करें

2. समय अंतराल निर्धारित करें। यह नियमित पिगीबैक खुद को TIMER0 इंटरप्ट पर ले जाता है, जो हर ~ 1 मिसे पर आग लगाने के लिए सेट है।

आपका "अंतराल" प्रक्रिया के लिए TIMER0 इंटरप्ट की संख्या है। प्रत्येक अंतराल ~ 1 मिसे है, इसलिए आप वास्तव में यह निर्धारित कर रहे हैं कि आपके अंतराल को सक्रिय करने से पहले कितने TIMER0 गिनने के लिए बाधित होते हैं। IOW, वेरिएबल TIMER0_COUNT को जितने भी मिलीसेकंड में आप प्रतीक्षा करना चाहते हैं, सेट करें। उदाहरण के लिए, एक सेकंड के आधे हिस्से के लिए 500 का उपयोग करें। 3 सेकंड के लिए 3000 का प्रयोग करें।

चरण 3: इंटरप्ट इनिशियलाइज़ेशन

3. अपने सेटअप () विधि में "TIMER0 इनिशियलाइज़ेशन" कोड जोड़ें। दोबारा, बस सेटअप() में कॉपी और पेस्ट करें।

// *** TIMER0 आरंभीकरण ***

क्ली (); // सभी व्यवधानों को बंद करें TIMSK0 = 0; // कम घबराना OCR0A = 0xBB के लिए टाइमर 0 बंद करें; // मनमाने ढंग से इंटरप्ट काउंट TIMSK0 |= _BV (OCIE0A); // पिग्गी बैक ऑन इंटरप्ट सेई (); // इंटरप्ट को वापस चालू करें

चरण 4: अपना कोड कहां जोड़ें

4. अपने लूप() मेथड में "टाइम चेक" कोड जोड़ें। लूप () में कॉपी और पेस्ट करें।

अगर (समय) {

समय = झूठा; // यहां कुछ करें }

"समय = झूठा;" लाइन महत्वपूर्ण है। इस लाइन के बिना "यहां कुछ करें" लाइन (ओं) को हर बार प्रोग्राम द्वारा लूप () निष्पादित करने पर निष्पादित किया जाएगा।

बेशक, आप अपनी गतिविधियों को "यहां कुछ करें" लाइन में प्रतिस्थापित करते हैं। कुछ टेक्स्ट प्रिंट करने या एलईडी फ्लैश करने से शुरुआत करें।

हो गया!

सिफारिश की: