فهرست مطالب:
- مرحله 1: موارد مورد استفاده در این پروژه
- مرحله 2: اتصال سخت افزار
- مرحله 3: برنامه نویسی نرم افزار
- مرحله 4: عملیات
تصویری: موسیقی کریسمس Cheer Light: 4 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:55
کریسمس مبارک! آیا می خواهید درخت کریسمس داشته باشید که بتواند با شما ارتباط برقرار کند؟
مرحله 1: موارد مورد استفاده در این پروژه
اجزای سخت افزاری
- Seeeduino V4.2
- Base Shield V2
- Grove - سنسور حرکت PIR قابل تنظیم
- گروو - سنسور بلندی صدا
- Grove - WS2813 RGB LED Strip ضد آب - 60 LED/m - 1m
برنامه های نرم افزاری و خدمات آنلاین
آردوینو IDE
مرحله 2: اتصال سخت افزار
سنسور PIR ، سنسور صدا و نوار LED را جداگانه به درگاه D2 ، A0 و D6 Base Shield وصل کنید. Base Shield را به Seeduino وصل کنید ، تمام شد.
مرحله 3: برنامه نویسی نرم افزار
کتابخانه های زیر باید قبل از برنامه نویسی نصب شوند ، لطفاً آنها را بارگیری و به صورت دستی در Arduino IDE خود وارد کنید:
- Led_Strip
- MsTimer2
- آردوینو_وکتور
به منظور مختصرتر کردن کد ، ما آن را بسته بندی کرده ایم. کلاس CheerLight کلاس کاربردی این پروژه است.
کلاس کاربردی:: CheerLight
: public application:: interface:: IApplication {public: void setup (void)؛ حلقه خالی (خالی) ؛ void setPIRSensorPin (پین uint8_t) ؛ void setLoudnessSensorPin (uint8_t pin) ؛ اندازه خالی سنسورها (خلأ) ؛ void changeAnimation (void * args)؛ void changeSpeed (void * args)؛ void changeColor (void * args) ؛ برنامه استاتیک:: CheerLight * getInstance (void) ؛ protected: driver:: LEDStrip _ledStrip؛ راننده:: PIRSensor _pirSensor؛ راننده:: LoudnessSensor _loudnessSensor؛ uint8_t _animation؛ middleware:: Delegate _detectedDelegate؛ middleware:: Delegate _absoluteLoudnessDelegate؛ middleware:: Delegate _relativeLoudnessDelegate؛ CheerLight (باطل) ؛ برنامه استاتیک:: CheerLight _instance؛ }؛
کلاس CheerLight توسط Singleton Patterns طراحی شده است ، به این معنی که فقط یک نمونه برای آن وجود دارد ، می توانید به آن نمونه با CheerLight:: getInstance () تماس بگیرید. اگر اتصال سنسورهای شما با اتصال سخت افزار تفاوت دارد ، می توانید آنها را با فراخوانی متدهای setPIRSensorPin () و setLoudnessSensorPin () تغییر دهید.
ما برای اندازه گیری به موقع سنسورها ، متد () masëSensors () را در وقفه تایمر توصیه می کنیم ، اما فراخوانی دستی متدهای changeAnimation () ، changeSpeed () یا changeColor () ضروری نیست. هنگام اندازه گیری سنسورها ، آنها از طریق نمایندگان فراخوانی می شوند.
نماینده چیست؟
همانطور که همه می دانیم ، می توانیم اشاره گر تابع را اعلام کرده و آن را به یک تابع در C نشان دهیم:
void func1 (void)؛
void (*pFunc) (void) = func1؛
و از آن برای فراخوانی تابعی که به آن اشاره کرده است استفاده کنید
pFunc ()؛
اما اگر سعی کنید کد زیر را کامپایل کنید ، تفاوت هایی در C ++ وجود دارد:
کلاس A {
public: void func1 (void)؛ }؛ void (*pFunc) (void) = & A:: func1؛
کامپایلر خطای تبدیل نوع را گزارش می کند ، در اینجا مثال مناسب است:
void (A::*pFunc) (void) = & A:: func1؛
وقتی سعی می کنیم از آن برای فراخوانی آن روش استفاده کنیم ، دوباره خطا می شود. دلیل این خطا این است که یک شیء متد باید توسط یک شی فراخوانی شود. بنابراین ما یک شی ایجاد می کنیم تا آن را صدا کنیم:
A a؛
a.*pFunc ()؛
اینبار مشکلی نیست بنابراین کلاس Delegate در Delegate.h وجود دارد.
قالب
class middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (T *object، void (T:: *method) (void *))؛ void invoke (void * args)؛ محافظت شده: T * _object؛ void (T:: *_ method) (void *)؛ }؛ middleware template inline:: Delegate:: Delegate (T *object، void (T:: *method) (void *)): _object (object)، _method (method) {} template inline void middleware:: Delegate:: invoke (void * args) {(_object-> * _ method) (args) ؛ }
از آنجا که کلاس Delegate یک کلاس قالب است ، به این معنی که Delegate با Delegate تفاوت دارد ، چگونه می توان آنها را با اشاره گر نشان داد که دارای یک نوع هستند؟ پاسخ رابط است ، بنابراین رابط IDelegate در IDelegate.h وجود دارد.
class middleware:: interface:: IDelegate {
public: فراخوانی خلاء مجازی (void * args) = 0؛ }؛
در کلاس PIR Sensor و Loudness Sensor ، متغیری به نام _delegates وجود دارد که برای ذخیره اشاره گر Delegates استفاده می شود ، و متدی به نام invokeAllDelegates () برای فراخوانی همه Delegates در _delegates وجود دارد ، که در متد () اندازه گیری می شود.
توجه: روشهای تفویض ، مانند changeAnimation () ، changeSpeed () و changeColor () در وقفه timer2 فراخوانی می شوند ، بنابراین از تاخیر () یا سایر عملکردهای مبتنی بر وقفه در آن استفاده نکنید.
توصیه شده:
نمایش نور کریسمس همزمان با موسیقی!: 4 مرحله
نمایش نور کریسمس همزمان با موسیقی!: در این قسمت آموزشی ، من قصد دارم به شما نشان دهم که چگونه یک نمایش نور کریسمس را با موسیقی کریسمس با استفاده از پیکسل های RGB هماهنگ کنید. اجازه ندهید این نام شما را بترساند! یادگیری نحوه انجام این کار چندان سخت نیست. من به شما هشدار می دهم که این می تواند کاملاً
درخت تنفس کریسمس - کنترل نور کریسمس آردوینو: 4 مرحله
درخت تنفس کریسمس-کنترل کننده نور کریسمس آردوینو: خبر خوبی نیست که جعبه کنترل درخت کریسمس مصنوعی از پیش روشن شده 9 فوت قبل از کریسمس شکسته شود و سازنده قطعات جایگزین ارائه نمی دهد. این غیرقابل بررسی نشان می دهد که چگونه می توانید راننده و کنترل کننده چراغ LED خود را از Ar
سنسور جلوه هال: جعبه موسیقی کریسمس: 4 مرحله
سنسور جلوه هال: جعبه موسیقی کریسمس: این یک جعبه موسیقی است که پس از باز شدن موسیقی پخش می کند (فیلم را تماشا کنید!). این یک راه عالی ، خاص و منحصر به فرد برای بسته بندی هدایای خود برای شخص خاص خود است! از سنسور جلوه سالن برای بررسی اینکه آیا درب به دلیل عدم وجود میدان مغناطیسی باز شده است استفاده می کند یا خیر
چراغ های کریسمس تحت کنترل موسیقی بسازید: 6 مرحله
چراغ های کریسمس تحت کنترل موسیقی بسازید: چراغ های کریسمس با موسیقی را با قیمت بسیار ارزان بسازید. این از قطعات بسیار اساسی استفاده می کند. این ایده توسط من ایجاد نشده است. این یک مشتق از طرح ریبیتسکی است که در اینجا قرار دارد
کریسمس-جعبه: چراغ ها و نمایش موسیقی کریسمس کنترل شده با Arduino/ioBridge: 7 مرحله
Xmas-box: چراغها و نمایش موسیقی کریسمس با کنترل اینترنت با آردوینو/ioBridge: پروژه جعبه کریسمس من شامل یک چراغ کریسمس تحت کنترل اینترنت و نمایش موسیقی است. می توان آهنگ کریسمس را به صورت آنلاین درخواست کرد که سپس در صف قرار گرفته و به ترتیب درخواست شده پخش می شود. این موسیقی بر اساس یک استاندارد FM پخش می شود