विषयसूची:

क्रिसमस संगीत जयकार लाइट: 4 कदम
क्रिसमस संगीत जयकार लाइट: 4 कदम

वीडियो: क्रिसमस संगीत जयकार लाइट: 4 कदम

वीडियो: क्रिसमस संगीत जयकार लाइट: 4 कदम
वीडियो: गीत के साथ दुनिया के लिए खुशी | क्रिसमस कैरोल और गीत 2024, नवंबर
Anonim
क्रिसमस संगीत जयकार लाइट
क्रिसमस संगीत जयकार लाइट

क्रिसमस की बधाई! क्या आप एक क्रिसमस ट्री रखना चाहते हैं जो आपके साथ बातचीत कर सके?

चरण 1: इस परियोजना में प्रयुक्त चीजें

हार्डवेयर घटक

  • सीडुइनो वी4.2
  • बेस शील्ड V2
  • ग्रोव - एडजस्टेबल पीर मोशन सेंसर
  • ग्रोव - लाउडनेस सेंसर
  • ग्रोव - WS2813 RGB LED स्ट्रिप वाटरप्रूफ - 60 LED/m - 1m

सॉफ़्टवेयर ऐप्स और ऑनलाइन सेवाएं

अरुडिनो आईडीई

चरण 2: हार्डवेयर कनेक्शन

हार्डवेयर कनेक्शन
हार्डवेयर कनेक्शन

पीर सेंसर, लाउडनेस सेंसर और एलईडी स्ट्रिप को बेस शील्ड के पोर्ट D2, A0 और D6 से अलग से कनेक्ट करें। सीडुइनो में प्लग बेस शील्ड, सब हो गया।

चरण 3: सॉफ्टवेयर प्रोग्रामिंग

प्रोग्रामिंग से पहले निम्नलिखित पुस्तकालयों को स्थापित करने की आवश्यकता है, कृपया उन्हें अपने Arduino IDE में मैन्युअल रूप से डाउनलोड और आयात करें:

  • एलईडी स्ट्रिप
  • एमएसटाइमर2
  • Arduino_वेक्टर

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

कक्षा आवेदन:: चीयरलाइट

: सार्वजनिक अनुप्रयोग:: इंटरफ़ेस:: Iapplication {सार्वजनिक: शून्य सेटअप (शून्य); शून्य लूप (शून्य); शून्य सेटPIRSensorPin (uint8_t पिन); शून्य सेट लाउडनेस सेंसरपिन (uint8_t पिन); शून्य माप सेंसर (शून्य); शून्य परिवर्तनएनीमेशन (शून्य * तर्क); शून्य परिवर्तन गति (शून्य * तर्क); शून्य परिवर्तन रंग (शून्य * तर्क); स्थिर अनुप्रयोग:: चीयरलाइट * getInstance (शून्य); संरक्षित: ड्राइवर:: LEDStrip _ledStrip; ड्राइवर::PIRSensor _pirSensor; ड्राइवर:: लाउडनेस सेंसर _loudnessSensor; uint8_t _एनीमेशन; मिडलवेयर:: प्रतिनिधि _detectedDelegate; मिडलवेयर:: प्रतिनिधि _absoluteLoudnessDelegate; मिडलवेयर:: डेलिगेट _relativeLoudnessDelegate; चीयरलाइट (शून्य); स्थिर अनुप्रयोग:: चीयरलाइट _instance; };

CheerLight वर्ग को सिंगलटन पैटर्न द्वारा डिज़ाइन किया गया था, जिसका अर्थ है कि इसके लिए केवल एक उदाहरण है, आप उस उदाहरण के लिए CheerLight::getInstance() को कॉल कर सकते हैं। यदि आपके सेंसर का कनेक्शन हार्डवेयर कनेक्शन से भिन्न है, तो आप उन्हें setPIRSensorPin() और setLoudnessSensorPin() विधियों को कॉल करके बदल सकते हैं।

छवि
छवि

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

एक प्रतिनिधि क्या है?

जैसा कि हम सभी जानते हैं, हम एक फ़ंक्शन पॉइंटर घोषित कर सकते हैं और इसे C में किसी फ़ंक्शन को इंगित कर सकते हैं:

शून्य func1 (शून्य);

शून्य (*pFunc)(शून्य) = func1;

और उस फ़ंक्शन को कॉल करने के लिए इसका उपयोग करें जो इसे इंगित करता है

पीएफएनसी ();

लेकिन सी ++ में अंतर हैं, यदि आप नीचे दिए गए कोड को संकलित करने का प्रयास करते हैं:

कक्षा {

सार्वजनिक: शून्य func1 (शून्य); }; शून्य (*pFunc)(शून्य) = &A::func1;

संकलक एक प्रकार की रूपांतरण त्रुटि की रिपोर्ट करेगा, यहाँ सही उदाहरण है:

शून्य (ए:: * पीफनक) (शून्य) = और ए:: func1;

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

ए ए;

ए। * पीफनक ();

इस बार कोई दिक्कत नहीं है। तो Delegate.h में प्रतिनिधि वर्ग है।

टेम्पलेट

क्लास मिडलवेयर:: प्रतिनिधि: सार्वजनिक मिडलवेयर:: इंटरफ़ेस:: आईडीलेगेट {सार्वजनिक: प्रतिनिधि (टी * ऑब्जेक्ट, शून्य (टी:: * विधि) (शून्य *)); शून्य आह्वान (शून्य * तर्क); संरक्षित: टी * _ऑब्जेक्ट; शून्य (टी:: * _ विधि) (शून्य *); }; टेम्पलेट इनलाइन मिडलवेयर:: प्रतिनिधि:: प्रतिनिधि (टी * वस्तु, शून्य (टी:: * विधि) (शून्य *)): _ वस्तु (वस्तु), _ विधि (विधि) { } टेम्पलेट इनलाइन शून्य मिडलवेयर:: प्रतिनिधि:: आह्वान (शून्य * args) {(_object->*_method)(args); }

क्योंकि प्रतिनिधि वर्ग एक टेम्पलेट वर्ग है, जिसका अर्थ है कि प्रतिनिधि प्रतिनिधि के लिए अंतर है, उन्हें सूचक द्वारा कैसे इंगित किया जाए, एक ही प्रकार है? उत्तर इंटरफ़ेस है, इसलिए IDelegate.h में IDelegate इंटरफ़ेस है।

क्लास मिडलवेयर:: इंटरफ़ेस:: आईडीलेगेट {

सार्वजनिक: आभासी शून्य आह्वान (शून्य * तर्क) = 0; };

पीर सेंसर और लाउडनेस सेंसर की कक्षा में, _delegates नाम का एक वेरिएबल होता है जिसका उपयोग डेलिगेट्स के पॉइंटर को स्टोर करने के लिए किया जाता है, और एक विधि होती है जिसका नाम invokeAllDelegates() होता है जिसका उपयोग _delegates में सभी डेलिगेट्स को इनवाइट करने के लिए किया जाता है, इसे माप () विधि में कहा जाएगा।

नोट: डेलिगेट विधियाँ, जैसे कि चेंजएनीमेशन (), चेंजस्पीड () और चेंजकलर () को टाइमर २ इंटरप्ट में कहा जाएगा, इसलिए इसमें देरी () या अन्य इंटरप्ट-आधारित फ़ंक्शन का उपयोग न करें।

सिफारिश की: