সুচিপত্র:

ক্রিসমাস মিউজিক চিয়ার লাইট: 4 টি ধাপ
ক্রিসমাস মিউজিক চিয়ার লাইট: 4 টি ধাপ

ভিডিও: ক্রিসমাস মিউজিক চিয়ার লাইট: 4 টি ধাপ

ভিডিও: ক্রিসমাস মিউজিক চিয়ার লাইট: 4 টি ধাপ
ভিডিও: ক্যামেরা ভুলবশত বন্ধ করতে ভুলে গিয়েছিলো , এবং তারপর যা হলো নিজেই দেখে নিন 2024, নভেম্বর
Anonim
ক্রিসমাস মিউজিক চিয়ার লাইট
ক্রিসমাস মিউজিক চিয়ার লাইট

শুভ ক্রিসমাস! আপনি কি একটি ক্রিসমাস ট্রি রাখতে চান যা আপনার সাথে যোগাযোগ করতে পারে?

ধাপ 1: এই প্রকল্পে ব্যবহৃত জিনিসগুলি

হার্ডওয়্যার উপাদান

  • Seeeduino V4.2
  • বেস শিল্ড V2
  • গ্রোভ - অ্যাডজাস্টেবল পিআইআর মোশন সেন্সর
  • Grove - Loudness Sensor
  • গ্রোভ - WS2813 RGB LED স্ট্রিপ ওয়াটারপ্রুফ - 60 LED/m - 1m

সফটওয়্যার অ্যাপ এবং অনলাইন সেবা

Arduino IDE

পদক্ষেপ 2: হার্ডওয়্যার সংযোগ

হার্ডওয়্যার সংযোগ
হার্ডওয়্যার সংযোগ

পিআইআর সেন্সর, লাউডনেস সেন্সর এবং এলইডি স্ট্রিপকে বেস শিল্ডের পোর্ট D2, A0 এবং D6 থেকে আলাদাভাবে সংযুক্ত করুন। সিডুইনো থেকে বেস শিল্ড প্লাগ করুন, সব শেষ।

ধাপ 3: সফটওয়্যার প্রোগ্রামিং

প্রোগ্রামিং করার আগে নিচের লাইব্রেরিগুলি ইনস্টল করতে হবে, অনুগ্রহ করে এগুলি ডাউনলোড করুন এবং আপনার Arduino IDE এ ম্যানুয়ালি আমদানি করুন:

  • Led_Strip
  • MsTimer2
  • Arduino_Vector

কোডটি আরও সংক্ষিপ্ত করার জন্য, আমরা এটি প্যাকেজ করেছি। চিয়ারলাইট ক্লাস এই প্রকল্পের আবেদন শ্রেণী।

ক্লাস অ্যাপ্লিকেশন:: চিয়ারলাইট

: public application:: interface:: IApplication {public: void setup (void); অকার্যকর লুপ (অকার্যকর); অকার্যকর setPIRSensorPin (uint8_t pin); অকার্যকর setLoudnessSensorPin (uint8_t পিন); অকার্যকর পরিমাপ সেন্সর (অকার্যকর); অকার্যকর পরিবর্তন অ্যানিমেশন (অকার্যকর * আর্গ); অকার্যকর পরিবর্তন গতি (শূন্য * args); অকার্যকর পরিবর্তন রঙ (অকার্যকর * আর্গ); স্ট্যাটিক অ্যাপ্লিকেশন:: চিয়ারলাইট * getInstance (অকার্যকর); সুরক্ষিত: ড্রাইভার:: LEDStrip _ledStrip; ড্রাইভার:: PIRSensor _pirSensor; ড্রাইভার:: LoudnessSensor _loudnessSensor; uint8_t _ অ্যানিমেশন; মিডলওয়্যার:: প্রতিনিধি _ সনাক্তকৃত প্রতিনিধি; মিডলওয়্যার:: প্রতিনিধি _absoluteLoudnessDelegate; middleware:: প্রতিনিধি _relativeLoudnessDelegate; চিয়ারলাইট (অকার্যকর); স্ট্যাটিক অ্যাপ্লিকেশন:: চিয়ারলাইট _ ইন্সট্যান্স; };

চিয়ারলাইট ক্লাসটি সিঙ্গেলটন প্যাটার্নস দ্বারা ডিজাইন করা হয়েছিল, যার অর্থ এটির জন্য কেবলমাত্র একটি উদাহরণ রয়েছে, আপনি সেই উদাহরণে চিয়ারলাইট:: getInstance () কল করতে পারেন। যদি আপনার সেন্সরের সংযোগ হার্ডওয়্যার সংযোগের সাথে পার্থক্য করে, তাহলে আপনি setPIRSensorPin () এবং setLoudnessSensorPin () পদ্ধতিতে কল করে তাদের পরিবর্তন করতে পারেন।

ছবি
ছবি

আমরা সেন্সরকে সময়মত পরিমাপ করার জন্য টাইমার ইন্টারাপ্টে কল সেন্সর () পদ্ধতিতে কল করার সুপারিশ করি, কিন্তু কল এঞ্জিমেশন (), চেঞ্জ স্পিড () অথবা চেঞ্জ কালার () পদ্ধতিগুলি ম্যানুয়ালি প্রয়োজন হয় না। সেন্সর পরিমাপ করার সময় তাদের প্রতিনিধিদের মাধ্যমে ডাকা হবে।

একজন প্রতিনিধি কি?

আমরা সবাই জানি, আমরা একটি ফাংশন পয়েন্টার ঘোষণা করতে পারি এবং এটিকে সি -তে একটি ফাংশন নির্দেশ করতে পারি:

অকার্যকর func1 (অকার্যকর);

অকার্যকর (*pFunc) (অকার্যকর) = func1;

এবং এটি যে ফাংশনটি নির্দেশ করেছে তাকে কল করতে এটি ব্যবহার করুন

pFunc ();

কিন্তু C ++ এ পার্থক্য আছে, যদি আপনি নীচের কোডটি কম্পাইল করার চেষ্টা করেন:

শ্রেণীকক্ষে {

পাবলিক: অকার্যকর func1 (অকার্যকর); }; অকার্যকর (*pFunc) (অকার্যকর) = & A:: func1;

কম্পাইলার একটি টাইপ রূপান্তর ত্রুটি রিপোর্ট করবে, এখানে সঠিক উদাহরণ:

অকার্যকর (A::*pFunc) (অকার্যকর) = & A:: func1;

যখন আমরা সেই পদ্ধতিতে কল করার জন্য এটি ব্যবহার করার চেষ্টা করি, আবার ত্রুটি। সেই ত্রুটির কারণ হল যে একটি বস্তু-পদ্ধতি অবশ্যই একটি বস্তু দ্বারা আহ্বান করা উচিত। তাই আমরা এটিকে কল করার জন্য একটি বস্তু তৈরি করি:

ক a;

a।*pFunc ();

এবার কোন সমস্যা নেই। সুতরাং Delegate.h এ প্রতিনিধি শ্রেণী আছে।

টেমপ্লেট

class middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void invoke (void * args); সুরক্ষিত: T * _object; অকার্যকর (টি:: *_ পদ্ধতি) (শূন্য *); }; টেমপ্লেট ইনলাইন মিডলওয়্যার:: প্রতিনিধি:: প্রতিনিধি (টি *বস্তু, অকার্যকর (টি:: *পদ্ধতি) (অকার্যকর)): _object (অবজেক্ট), _মেথড (পদ্ধতি) {} টেমপ্লেট ইনলাইন অকার্যকর মিডলওয়্যার:: প্রতিনিধি:: আহ্বান (void * args) {(_object-> * _ method) (args); }

যেহেতু ডেলিগেট ক্লাস একটি টেমপ্লেট ক্লাস, যার মানে ডেলিগেট ডেলিগেটের পার্থক্য, কিভাবে পয়েন্টার দ্বারা তাদের নির্দেশ করা যায় একই ধরনের? উত্তর হল ইন্টারফেস, তাই IDelegate.h এ IDelegate ইন্টারফেস আছে।

class middleware:: interface:: IDelegate {

সর্বজনীন: ভার্চুয়াল অকার্যকর আহ্বান (শূন্য * আর্গ) = 0; };

পিআইআর সেন্সর এবং লাউডনেস সেন্সরের ক্লাসে, _delegates নামে একটি ভেরিয়েবল আছে যা প্রতিনিধিদের পয়েন্টার সংরক্ষণ করতে ব্যবহৃত হয়, এবং _delegates- এ সমস্ত প্রতিনিধিদের আহ্বান করার জন্য invokeAllDelegates () নামে একটি পদ্ধতি ব্যবহার করা হয়, এটি পরিমাপ () পদ্ধতিতে বলা হবে।

দ্রষ্টব্য: প্রতিনিধি পদ্ধতি, যেমন changeAnimation (), changeSpeed () এবং changeColor () কে টাইমার 2 ইন্টারাপ্টে বলা হবে, তাই এতে বিলম্ব () বা অন্য ইন্টারাপ্ট-ভিত্তিক ফাংশন ব্যবহার করবেন না।

প্রস্তাবিত: