Оглавление:
- Шаг 1. Вещи, использованные в этом проекте
- Шаг 2: Подключение оборудования
- Шаг 3: Программирование программного обеспечения
- Шаг 4: Эксплуатация
Видео: Рождественская музыка Cheer Light: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Счастливого Рождества! Вы хотите, чтобы елка могла взаимодействовать с вами?
Шаг 1. Вещи, использованные в этом проекте
Компоненты оборудования
- Seeeduino V4.2
- Базовый щит V2
- Grove - Регулируемый датчик движения PIR
- Grove - Датчик громкости
- Grove - Водонепроницаемая светодиодная лента RGB WS2813 - 60 светодиодов / м - 1 м
Программные приложения и онлайн-сервисы
IDE Arduino
Шаг 2: Подключение оборудования
Подключите ИК-датчик, датчик громкости и светодиодную ленту к портам D2, A0 и D6 Base Shield по отдельности. Подключите Base Shield к Seeduino, все готово.
Шаг 3: Программирование программного обеспечения
Следующие ниже библиотеки необходимо установить перед программированием, загрузите и импортируйте их в свою Arduino IDE вручную:
- Светодиодная полоса
- MsTimer2
- Arduino_Vector
Чтобы код был лаконичнее, мы его упаковали. Класс CheerLight - это класс приложения этого проекта.
класс application:: CheerLight
: общедоступное приложение:: интерфейс:: IApplication {общедоступное: установка недействительности (недействительность); пустая петля (void); void setPIRSensorPin (вывод uint8_t); void setLoudnessSensorPin (вывод uint8_t); void measureSensors (недействителен); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); статическое приложение:: CheerLight * getInstance (void); защищено: драйвер:: LEDStrip _ledStrip; драйвер:: PIRSensor _pirSensor; драйвер:: LoudnessSensor _loudnessSensor; uint8_t _animation; промежуточное ПО:: Delegate _detectedDelegate; промежуточное ПО:: Delegate _absoluteLoudnessDelegate; промежуточное ПО:: Delegate _relativeLoudnessDelegate; CheerLight (недействительно); статическое приложение:: CheerLight _instance; };
Класс CheerLight был разработан Singleton Patterns, что означает, что для него существует только один экземпляр, вы можете вызвать CheerLight:: getInstance () для этого экземпляра. Если подключение ваших датчиков отличается от подключения оборудования, вы можете изменить их, вызвав методы setPIRSensorPin () и setLoudnessSensorPin ().
Мы рекомендуем вызывать метод measureSensors () в прерывании таймера, чтобы датчики измерялись своевременно, но вызывать методы changeAnimation (), changeSpeed () или changeColor () вручную не требуется. Они будут вызываться через делегатов при измерении датчиков.
Что такое делегат?
Как мы все знаем, мы можем объявить указатель функции и сделать так, чтобы он указывал на функцию в C:
void func1 (пусто);
void (* pFunc) (void) = func1;
и используйте его для вызова функции, на которую он указал
pFunc ();
Но в C ++ есть отличия, если вы попытаетесь скомпилировать следующий код:
class A {
общедоступные: void func1 (void); }; void (* pFunc) (void) = & A:: func1;
компилятор сообщит об ошибке преобразования типа, вот правильный пример:
void (A:: * pFunc) (void) = & A:: func1;
Когда мы пытаемся использовать его для вызова этого метода, снова возникает ошибка. Причина этой ошибки в том, что объект-метод должен быть вызван объектом. Итак, мы создаем объект для его вызова:
А а;
а. * pFunc ();
На этот раз без проблем. Итак, в Delegate.h есть класс Delegate.
шаблон
промежуточное ПО класса:: Делегат: общедоступное промежуточное ПО:: интерфейс:: IDelegate {общедоступное: Делегат (объект T *, void (метод T:: *) (void *)); void invoke (void * args); защищено: T * _object; void (T:: * _ method) (void *); }; встроенное промежуточное ПО шаблона:: 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.h есть интерфейс IDelegate.
class middleware:: interface:: IDelegate {
public: виртуальный вызов void (void * args) = 0; };
В классе PIR Sensor и Loudness Sensor есть переменная с именем _delegates, используемая для хранения указателя делегатов, и есть метод с именем invokeAllDelegates (), используемый для вызова всех делегатов в _delegates, он будет вызываться в методе measure ().
ПРИМЕЧАНИЕ. Методы делегирования, такие как changeAnimation (), changeSpeed () и changeColor (), будут вызываться в прерывании timer2, поэтому НЕ используйте в нем delay () или другие функции, основанные на прерываниях.
Рекомендуемые:
Электронная рождественская елка: 4 шага
Электронная рождественская елка: Привет! Хочу подарить свою елку электронич. Я построил это как украшение, и я думаю, что он очень компактный и красивый
Увеличенная и улучшенная рождественская звезда Neopixel Attiny85: 3 шага (с изображениями)
Большая и улучшенная рождественская звезда Neopixel Attiny85: В прошлом году я сделал небольшую рождественскую звезду на 3D-принтере, см. Https://www.instructables.com/id/Christmas-Star-LE… В этом году я сделал большую звезду из нити. 50 неопикселей (5V WS2811). У этой более крупной звезды было больше узоров (я все еще добавляю и улучшаю
Дышащая рождественская елка - контроллер рождественских огней Arduino: 4 шага
Дышащая рождественская елка - Контроллер рождественского освещения Arduino: это не хорошие новости, что блок управления моей 9-футовой предварительно освещенной искусственной рождественской елки сломался перед Рождеством ,, и производитель не предоставляет запасных частей. Этот непостижимый пример показывает, как сделать свой собственный драйвер и контроллер светодиодного освещения с использованием Ar
Рождественская открытка на печатную плату: 3 шага (с изображениями)
Рождественская открытка PCB: С приближением Рождества я подумывал об отличном подарке для моих родственников и друзей. Я недавно заказал пару печатных плат для другого проекта и подумал, что было бы весело сделать рождественские открытки из печатных плат. Помимо того, что
Вращающаяся светодиодная рождественская елка: 4 шага
Вращающаяся светодиодная новогодняя елка: Привет! Я сделал эту круто выглядящую вращающуюся светодиодную новогоднюю елку вместе с моими 10 и 12-летними родственниками из дешевых и простых в продаже деталей. Мое видео на YoutTube состоит из 3 частей (3 уровня сложности), поэтому я надеюсь, что и опытному любителю оно понравится