Përmbajtje:
- Hapi 1: Gjërat e përdorura në këtë projekt
- Hapi 2: Lidhja e harduerit
- Hapi 3: Programimi i softuerit
- Hapi 4: Funksionimi
Video: Muzika e Krishtlindjeve Gëzoni Dritën: 4 Hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:20
Gëzuar Krishtlindjet! Dëshironi të keni një pemë të Krishtlindjes që mund të ndërveprojë me ju?
Hapi 1: Gjërat e përdorura në këtë projekt
Komponentët e harduerit
- Seeeduino V4.2
- Mburoja e Bazës V2
- Grove - Sensor lëvizës PIR i rregullueshëm
- Grove - Sensori i zhurmës
- Grove - WS2813 RGB Rrip LED i papërshkueshëm nga uji - 60 LED/m - 1m
Aplikacionet softuerike dhe shërbimet online
Arduino IDE
Hapi 2: Lidhja e harduerit
Lidhni sensorin PIR, sensorin e zhurmës dhe shiritin LED në portën D2, A0 dhe D6 të Base Shield veç e veç. Plug Base Shield në Seeduino, gjithçka është bërë.
Hapi 3: Programimi i softuerit
Bibliotekat e mëposhtme duhet të instalohen para programimit, ju lutemi shkarkoni dhe importoni ato në Arduino IDE tuaj me dorë:
- Led_Strip
- MsTimer2
- Arduino_Vektor
Për ta bërë kodin më konciz, ne e kemi paketuar atë. Klasa CheerLight është klasa e aplikimit të këtij projekti.
aplikimi i klasës:: CheerLight
: public application:: interface:: IApplication {public: void setup (void); lak void (i pavlefshëm); void setPIRSensorPin (uint8_t pin); void setLoudnessSensorPin (uint8_t pin); masë e pavlefshme Sensorë (të pavlefshëm); ndryshim i pavlefshëmAnimacion (i pavlefshëm * args); ndryshim i pavlefshëm Shpejtësia (zbrazëti * args); ndryshim i pavlefshëm Ngjyra (zbrazëti * args); aplikim statik:: CheerLight * getInstance (i pavlefshëm); mbrojtur: shoferi:: LEDStrip _ledStrip; shoferi:: PIRSensor _pirSensor; shoferi:: LoudnessSensor _loudnessSensor; uint8_t _animacion; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (e pavlefshme); aplikim statik:: CheerLight _stance; };
Klasa CheerLight u krijua nga Singleton Patterns, që do të thotë se ka vetëm një shembull për të, ju mund të telefononi CheerLight:: getInstance () në atë shembull. Nëse lidhja e Sensorëve tuaj është e ndryshme nga Lidhja e Pajisjeve, ju mund t'i ndryshoni ato duke thirrur metodat setPIRSensorPin () dhe setLoudnessSensorPin ().
Ne rekomandojmë thirrjen e metodës masëSensore () në ndërprerjen e kohëmatësit për t'i bërë sensorët të maten në kohë, por thirrja e metodave të ndryshimitAnimation (), ndryshimit të shpejtësisë () ose ndryshimit të ngjyrës () nuk është e nevojshme. Ata do të thirren nëpërmjet Delegatëve kur maten sensorët.
Çfarë është një Delegat?
Siç e dimë të gjithë, ne mund të deklarojmë një tregues të funksionit dhe ta bëjmë atë të tregojë një funksion në C:
void func1 (void);
i pavlefshëm (*pFunc) (i pavlefshëm) = func1;
dhe përdorni atë për të thirrur funksionin që tregoi
pFunc ();
Por ka dallime në C ++, nëse përpiqeni të përpiloni kodin e mëposhtëm:
klasa A {
publike: void func1 (void); }; i pavlefshëm (*pFunc) (i pavlefshëm) = & A:: func1;
përpiluesi do të raportojë një gabim të konvertimit të tipit, këtu është shembulli i duhur:
i pavlefshëm (A::*pFunc) (i pavlefshëm) = & A:: func1;
Kur përpiqemi ta përdorim për ta thirrur atë metodë, gabim përsëri. Arsyeja për atë gabim është se një metodë objekt duhet të thirret nga një objekt. Pra, ne krijojmë një objekt për ta quajtur atë:
A a;
a.*pFunc ();
Këtë herë nuk ka problem. Pra ka klasë Delegate në Delegate.h.
shabllon
middleware i klasës:: Delegati: public middleware:: ndërfaqja:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void thirrje (pavlefshme * args); mbrojtur: T * _object; i pavlefshëm (T:: *_ metoda) (i pavlefshëm *); }; template inline middleware:: Delegate:: Delegate (T *object, void (T:: *method) (void *)): _object (object), _metoda (metoda) {} template inline void middleware:: Delegate:: invoke (void * args) {(_object-> * _ method) (args); }
Për shkak se klasa Delegate është një klasë model, që do të thotë se Delegati është ndryshim nga Delegati, si t'i bëjmë ato të tregohen me tregues të kenë të njëjtin lloj? Përgjigja është ndërfaqe, kështu që ka ndërfaqe IDelegate në IDelegate.h.
klasa middleware:: ndërfaqja:: IDelegate {
publike: thirrje e zbrazëtisë virtuale (zbrazëti * args) = 0; };
Në klasën e PIR Sensor dhe Loudness Sensor, ekziston një variabël e quajtur _ delegatët e përdorur për të ruajtur treguesin e Delegatëve, dhe ka një metodë të quajtur invokeAllDelegates () e përdorur për të thirrur të gjithë Delegatët në _ delegatët, ajo do të quhet në masë () metodë.
SH NOTNIM: Metodat e delegimit, të tilla si changeAnimation (), changeSpeed () dhe changeColor () do të thirren në ndërprerjen e timer2, kështu që NUK përdorni vonesë () ose funksion tjetër të bazuar në ndërprerje në të.
Recommended:
MOD: Ndizni/fikni dritën e pasme të LCD 3: 6 hapa
MOD: Nxjerr/Fik dritën e pasme LCD të ndezur: Mod për ndezjen/fikjen e dritës së ekranit duke shtypur natën. Tani mund të fikni dritën e pasme
Pema e Krishtlindjeve Frymëmarrëse - Kontrolluesi i dritës së Krishtlindjeve Arduino: 4 hapa
Pema e Krishtlindjeve Frymëmarrëse-Kontrolluesi i Dritës së Krishtlindjeve Arduino: Nuk është lajm i mirë që kutia e kontrollit për pemën time të Krishtlindjes të ndezur paraprakisht prej 9 këmbësh u prish para Krishtlindjeve , dhe prodhuesi nuk siguron pjesë zëvendësuese. Kjo e pakontrollueshme tregon se si ta bëni drejtuesin dhe kontrolluesin tuaj të dritës LED të përdorë Ar
Përdorni forcën dhe bëni dritën tuaj (teh): 9 hapa (me fotografi)
Përdorni Forcën dhe Bëni Lightsaber tuaj (Blade): Ky udhëzim është posaçërisht për të bërë një teh për një Ben Solo Legacy Lightsaber të blerë nga Disneyland's Galaxy's Edge në Anaheim, CA, megjithatë hapa të ngjashëm mund të merren për të bërë tehun tuaj për një tjetër rreze drite. Ndiqni për
Bëni dritat e Krishtlindjeve të kontrolluara nga muzika: 6 hapa
Bëni dritat e Krishtlindjeve të kontrolluara nga muzika: Bëni dritat e Krishtlindjeve të kontrolluara nga muzika për shumë lirë. Kjo përdor pjesë shumë themelore. Kjo ide nuk u krijua nga unë. Shtë një derivat i modelit të Rybitski që gjendet këtu
Kutia e Krishtlindjeve: Arduino/ioBridge Dritat e Krishtlindjeve të Kontrolluara nga Interneti dhe Muzika: 7 hapa
Xmas-box: Arduino/ioBridge Dritat dhe Muzika e Krishtlindjeve të Kontrolluara nga Interneti: Projekti im i kutisë së Krishtlindjeve përbëhet nga një dritë e Krishtlindjeve e kontrolluar nga interneti dhe shfaqje muzikore. Një këngë e Krishtlindjeve mund të kërkohet on-line, e cila më pas vihet në radhë dhe luhet sipas rendit të kërkuar. Muzika transmetohet në një stat FM