Съдържание:
- Стъпка 1: Нещата, използвани в този проект
- Стъпка 2: Хардуерна връзка
- Стъпка 3: Софтуерно програмиране
- Стъпка 4: Операция
Видео: Коледна музика Cheer Light: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Весела Коледа! Искате ли да имате коледно дърво, което да взаимодейства с вас?
Стъпка 1: Нещата, използвани в този проект
Хардуерни компоненти
- Seeeduino V4.2
- Базов щит V2
- Grove - Регулируем PIR сензор за движение
- Grove - Сензор за силата на звука
- Grove - WS2813 RGB LED лента Водоустойчива - 60 LED/m - 1м
Софтуерни приложения и онлайн услуги
Arduino IDE
Стъпка 2: Хардуерна връзка
Свържете PIR сензор, сензор за силата на звука и LED лента към портовете D2, A0 и D6 на Base Shield поотделно. Включете основния щит към Seeduino, всичко е готово.
Стъпка 3: Софтуерно програмиране
Следващите библиотеки трябва да се инсталират преди програмиране, моля, изтеглете ги и ги импортирайте ръчно във вашата Arduino IDE:
- Led_Strip
- MsTimer2
- Arduino_Vector
За да направим кода по -кратък, ние го опаковаме. Класът CheerLight е класът на приложение на този проект.
приложение за клас:: CheerLight
: обществено приложение:: интерфейс:: IApplication {обществено: настройка на void (void); void loop (void); void setPIRSensorPin (щифт uint8_t); void setLoudnessSensorPin (uint8_t щифт); void mjeraSensors (void); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); статично приложение:: CheerLight * getInstance (void); защитен: драйвер:: LEDStrip _ledStrip; драйвер:: PIRSensor _pirSensor; драйвер:: LoudnessSensor _loudnessSensor; uint8_t _анимация; посредник:: Делегат _detectedDelegate; посредник:: Делегат _absoluteLoudnessDelegate; посредник:: Делегат _relativeLoudnessDelegate; CheerLight (невалидно); статично приложение:: CheerLight _instance; };
Класът CheerLight е проектиран от Singleton Patterns, което означава, че има само един екземпляр за него, можете да извикате CheerLight:: getInstance () към този екземпляр. Ако връзката на вашите сензори е различна от хардуерната връзка, можете да ги промените, като извикате методите setPIRSensorPin () и setLoudnessSensorPin ().
Препоръчваме извикване на метода mereSensors () в прекъсване на таймера, за да направим сензорите измервани своевременно, но извикването на методите changeAnimation (), changeSpeed () или changeColor () ръчно не е необходимо. Те ще бъдат извикани чрез Делегати, когато сензорите бъдат измерени.
Какво е делегат?
Както всички знаем, можем да декларираме указател на функция и да го накараме да посочи функция в C:
void func1 (void);
void (*pFunc) (void) = func1;
и го използвайте за извикване на функцията, към която е посочил
pFunc ();
Но има разлики в C ++, ако се опитате да компилирате кода следното:
клас А {
публично: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
компилаторът ще докладва грешка при преобразуване на тип, ето десния пример:
void (A::*pFunc) (void) = & A:: func1;
Когато се опитваме да го използваме за извикване на този метод, отново грешка. Причината за тази грешка е, че обект-метод трябва да бъде извикан от обект. Затова създаваме обект, който да го нарича:
А а;
a.*pFunc ();
Този път няма проблем. Така че има Delegate клас в Delegate.h.
шаблон
клас middleware:: Делегат: обществен посредник:: интерфейс:: IDelegate {обществен: Делегат (T *обект, void (метод T:: *) (void *)); void invoke (void * args); защитен: T * _object; void (T:: *_ метод) (void *); }; шаблон вграден посредник:: Делегиране:: Делегиране (T *обект, void (T:: *метод) (void *)): _object (обект), _method (метод) {} шаблон inline void middleware:: Delegate:: invoke (void * args) {(_object-> * _ method) (args); }
Тъй като класът делегат е клас шаблон, което означава, че делегатът е разлика за делегата, как да ги накараме да бъдат посочени от показалец имат същия тип? Отговорът е интерфейс, така че има интерфейс IDelegate в IDelegate.h.
клас middleware:: интерфейс:: IDelegate {
публично: извикване на виртуална невалидност (void * args) = 0; };
В класа на PIR Sensor и Loudness Sensor има променлива, наречена _delegates, използвана за съхраняване на показалеца на Делегати, и има метод, наречен invokeAllDelegates (), използван за извикване на всички Делегати в _delegates, той ще бъде извикан в метода mere ().
ЗАБЕЛЕЖКА: Делегиращите методи, като changeAnimation (), changeSpeed () и changeColor () ще бъдат извикани в timeer2 прекъсване, така че НЕ използвайте delay () или друга функция, базирана на прекъсване.
Препоръчано:
Искряща Коледна звезда на Arduino: 8 стъпки
Искряща Коледна звезда на Arduino: Затова оценявам, че е малко късно за стартиране на коледен проект тази година. Но може би вече имате всичко необходимо и може би няма да отидете никъде тази година: Тогава може би, просто може би искате да опитате този малък проект. Списък с части
По -голяма и подобрена Коледна звезда Neopixel Attiny85: 3 стъпки (със снимки)
По-голяма и подобрена коледна звезда Neopixel Attiny85: Миналата година направих малка 3D отпечатана коледна звезда, вижте https://www.instructables.com/id/Christmas-Star-LE … Тази година направих по-голяма звезда от кичур от 50 неопиксела (5V WS2811). Тази по -голяма звезда имаше повече шарки (все още добавям и импровизирам
Коледна елха в безплатна форма: 7 стъпки
Коледна елха в свободна форма: Схеми със свободна форма, или мъртва грешка, или конструкции от точка до точка са добър начин да започнете прототипирането, без да правите печатна платка, и са много по-гъвкави от лента/перфорирана дъска! Често използвам тази техника за малки проекти или за отстраняване на грешки в по -големи. Но та
Вдишване на коледно дърво - Arduino Коледна светлина Контролер: 4 стъпки
Вдишване на коледно дърво-Arduino Christmas Light Controller: Не е добра новина, че кутията за управление на моето предварително осветено 9-футово изкуствено коледно дърво се счупи преди Коледа , и производителят не предоставя резервни части. Това неизвестно показва как да накарате вашия собствен светодиоден драйвер и контролер да използва Ar
Коледна светлина: 4 стъпки
Коледна светлина: Коледа е един от любимите ми празници, снегът, светлините, Дядо Коледа, подаръци! Просто е невероятно. Мечтая да видя сняг по време на Коледа, с всички цветни светлини в снега. Така че в този проект ще ви покажа как да добавите LED светлини към