Мазмұны:
- 1 -қадам: Бұл жобада қолданылатын заттар
- 2 -қадам: Жабдыққа қосылу
- 3 -қадам: бағдарламалық қамтамасыз ету
- 4 -қадам: операция
Бейне: Рождестволық музыка көңілді жарық: 4 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Рождество құтты болсын! Сізбен араласатын шырша болғанын қалайсыз ба?
1 -қадам: Бұл жобада қолданылатын заттар
Аппараттық компоненттер
- Seeeduino V4.2
- Негізгі қалқан V2
- Grove - реттелетін PIR қозғалыс сенсоры
- Grove - дыбыс датчигі
- Grove - WS2813 RGB суға төзімді LED жолағы - 60 жарық диоды/м - 1м
Бағдарламалық жасақтама және онлайн қызметтері
Arduino IDE
2 -қадам: Жабдыққа қосылу
PIR сенсоры, дыбыс датчигі мен жарық диодты жолақты Base Shield D2, A0 және D6 портына бөлек қосыңыз. Негізгі қалқаны Seeduino -ға қосыңыз, бәрі дайын.
3 -қадам: бағдарламалық қамтамасыз ету
Келесі кітапханалар бағдарламалау алдында орнатылуы керек, оларды Arduino IDE -ге қолмен жүктеп, импорттаңыз:
- Led_Strip
- MsTimer2
- Arduino_Vector
Кодты неғұрлым қысқа ету үшін біз оны пакеттедік. CheerLight класы - бұл жобаның қолданбалы класы.
сынып қосымшасы:: CheerLight
: жалпы қолданба:: интерфейс:: IApplication {public: void setup (void); бос цикл (бос); жарамсыз setPIRSensorPin (uint8_t түйреуіш); жарамсыз setLoudnessSensorPin (uint8_t түйреуіш); сенсорлар (жарамсыз); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); статикалық қолданба:: CheerLight * getInstance (жарамсыз); қорғалған: драйвер:: LEDStrip _ledStrip; жүргізуші:: PIRSensor _pirSensor; жүргізуші:: LoudnessSensor _loudnessSensor; uint8_t _ анимация; орта бағдарлама:: Delegate _detectedDelegate; орта бағдарлама:: Delegate _absoluteLoudnessDelegate; орта бағдарламалық қамтамасыз ету:: Delegate _relationLoudnessDelegate; CheerLight (жарамсыз); статикалық қолданба:: CheerLight _instance; };
CheerLight сыныбын Singleton Patterns әзірледі, бұл оның бір ғана данасы бар екенін білдіреді, сіз CheerLight:: getInstance () шақыруға болады. Егер сенсорлардың қосылымы аппараттық қосылымнан өзгеше болса, оларды setPIRSensorPin () және setLoudnessSensorPin () әдістеріне қоңырау шалу арқылы өзгертуге болады.
Датчиктерді уақытында өлшеу үшін, өлшеуіштердегі үзіліс кезінде өлшеуіштерді шақыруды ұсынамыз, бірақ changeAnimation (), changeSpeed () немесе changeColor () әдістерін қолмен шақырудың қажеті жоқ. Сенсорлар өлшенген кезде олар делегаттар арқылы шақырылады.
Делегат дегеніміз не?
Барлығымыз білетіндей, біз функция көрсеткішін жариялай аламыз және оны C функциясына нұсқай аламыз:
void func1 (жарамсыз);
void (*pFunc) (void) = func1;
және оны көрсетілген функцияны шақыру үшін пайдаланыңыз
pFunc ();
Бірақ C ++ - те айырмашылықтар бар, егер сіз төмендегі кодты құрастыруға тырыссаңыз:
А сыныбы {
қоғамдық: void func1 (жарамсыз); }; void (*pFunc) (void) = & A:: func1;
компилятор түрлендіру қатесі туралы хабарлайды, бұл дұрыс мысал:
void (A::*pFunc) (void) = & A:: func1;
Біз бұл әдісті шақыру үшін оны қолдануға тырысқанда, қате қайтадан пайда болады. Бұл қатенің себебі-объект-әдіс объектімен шақырылуы керек. Сондықтан біз оны шақыратын объект жасаймыз:
А а;
a.*pFunc ();
Бұл жолы проблема жоқ. Сонымен, Delegate.h -те Delegate класы бар.
үлгі
class middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void invoke (void * args); қорғалған: T * _объект; void (T:: *_ әдісі) (void *); }; орта кірістірілген бағдарламалық жасақтама үлгісі:: Delegate:: Delegate (T *объектісі, void (T:: *әдісі) (void *)): _object (object), _method (method) {} шаблон кірістірілген бос орта бағдарламалық қамтамасыз ету:: Delegate:: invoke (void * args) {(_object-> * _ әдісі) (args); }
Delegate класы - бұл үлгі класы, бұл Delegate -дің делегаттан айырмашылығын білдіреді, оларды бір типті көрсеткішпен қалай көрсетуге болады? Жауап - бұл интерфейс, сондықтан IDelegate.h ішінде IDelegate интерфейсі бар.
орта бағдарламалық қамтамасыз ету:: интерфейс:: IDelegate {
public: virtual void invoke (void * args) = 0; };
PIR Sensor және Loudness Sensor сыныбында делегаттар көрсеткішін сақтау үшін _delegates деп аталатын айнымалы бар, және _delegates -те барлық делегаттарды шақыру үшін invokeAllDelegates () атты әдіс бар, ол шара () әдісі деп аталады.
ЕСКЕРТПЕ: changeAnimation (), changeSpeed () және changeColor () сияқты өкілдік әдістер timer2 үзілісінде шақырылады, сондықтан delay () немесе үзілуге негізделген басқа функцияны ҚОЛДАНБАҢЫЗ.
Ұсынылған:
Рождестволық жарық диодты жарық диоды: 3 қадам
Рождестволық жарық диодты жарық диоды: Мен Рождество мерекелеріне арналған Arduino -ның қызықты және мерекелік жобасын жасағым келді, сондықтан мен өз қолыммен жарық диодты шамдарды жасауды шештім. Бұл жоба дәнекерлеу машинасын қажет етеді, сондықтан оны есте сақтаңыз
Рождестволық жарық шоуы музыкаға синхрондалған!: 4 қадам
Рождестволық жарық шоуы музыкаға синхрондалған! Бұл атау сізді қорқытпасын! Мұны қалай жасау керектігін үйрену қиын емес. Мен бұл ескерту жасаймын, бірақ бұл өте мүмкін
Рождестволық шыршамен тыныс алу - Arduino Рождестволық жарық контроллері: 4 қадам
Рождестволық шыршаның тыныс алуы-Arduino Рождестволық жарық реттегіші: 9 футтық алдын ала жарықтандырылған жасанды шыршаның басқару қорабы Рождество алдында үзілгені жақсы жаңалық емес, ал өндіруші қосалқы бөлшектерді бермейді. Бұл жарықдиодты жарықдиодты драйвер мен контроллерді қалай қолдануға болатынын көрсетеді
Холл әсерінің сенсоры: Рождестволық музыка қорабы: 4 қадам
Холл эффектінің сенсоры: Рождестволық музыкалық қорап: Бұл бір рет ашылған музыканы ойнайтын музыкалық қорап (бейнені қараңыз!). Бұл сіздің ерекше адамға сыйлықтарыңызды ораудың тамаша, ерекше және бірегей тәсілі! Ол магнит өрісінің жоқтығынан қақпақтың ашылғанын тексеру үшін холл эффектілі сенсорды қолданады
Рождестволық қорап: Arduino/ioBridge Интернет арқылы басқарылатын Рождестволық шамдар мен музыкалық шоу: 7 қадам
Рождестволық қорап: Arduino/ioBridge Интернет арқылы басқарылатын Рождестволық шамдар мен музыкалық шоу: Менің xmas-box жобам интернетпен басқарылатын Рождестволық шамдар мен музыкалық шоудан тұрады. Рождестволық әнді онлайн режимінде сұрауға болады, содан кейін ол кезекке қойылады және сұралған ретпен ойнатылады. Музыка FM күйінде беріледі