Taula de continguts:
- Pas 1: coses utilitzades en aquest projecte
- Pas 2: connexió de maquinari
- Pas 3: programació de programari
- Pas 4: operació
Vídeo: Christmas Music Cheer Light: 4 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
Bon Nadal! Voleu tenir un arbre de Nadal que pugui interactuar amb vosaltres?
Pas 1: coses utilitzades en aquest projecte
Components de maquinari
- Seeeduino V4.2
- Base Shield V2
- Grove - Sensor de moviment PIR ajustable
- Grove - Sensor de volum
- Grove - Tira LED WS2813 RGB impermeable - 60 LED / m - 1m
Aplicacions de programari i serveis en línia
IDE Arduino
Pas 2: connexió de maquinari
Connecteu el sensor PIR, el sensor de volum i la tira LED al port D2, A0 i D6 de Base Shield per separat. Connecteu Base Shield a Seeduino, tot fet.
Pas 3: programació de programari
Les biblioteques que segueixen han d’instal·lar-se abans de programar-les; descarregueu-les i importeu-les manualment al vostre IDE Arduino:
- Led_Strip
- MsTimer2
- Arduino_Vector
Per tal de fer el codi més concís, l’hem empaquetat. La classe CheerLight és la classe d'aplicació d'aquest projecte.
aplicació de classe:: CheerLight
: public application:: interface:: IApplication {public: void setup (void); bucle buit (buit); void setPIRSensorPin (pin uint8_t); void setLoudnessSensorPin (pin uint8_t); void measureSensors (void); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); aplicació estàtica:: CheerLight * getInstance (void); protected: driver:: LEDStrip _ledStrip; controlador:: PIRSensor _pirSensor; controlador:: LoudnessSensor _loudnessSensor; uint8_t _animació; middleware:: Delegat _detectedDelegat; middleware:: Delegat _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (buit); aplicació estàtica:: CheerLight _instance; };
La classe CheerLight va ser dissenyada per Singleton Patterns, el que significa que només hi ha una instància, podeu trucar a CheerLight:: getInstance () a aquesta instància. Si la connexió dels vostres sensors és diferent a la connexió de maquinari, podeu canviar-les trucant als mètodes setPIRSensorPin () i setLoudnessSensorPin ().
Es recomana trucar al mètode MeasureSensors () en la interrupció del temporitzador perquè els sensors es mesurin a temps, però no cal trucar manualment als mètodes changeAnimation (), changeSpeed () o changeColor (). Es trucaran mitjançant delegats quan es mesurin els sensors.
Què és un delegat?
Com tots sabem, podem declarar un punter de funció i fer-lo apuntar a una funció en C:
void func1 (buit);
void (* pFunc) (void) = func1;
i utilitzeu-lo per anomenar la funció a la qual apuntava
pFunc ();
Però hi ha diferències en C ++, si intenteu compilar el codi següent:
classe A {
públic: void func1 (void); }; void (* pFunc) (void) = & A:: func1;
el compilador informarà d'un error de conversió de tipus, aquí teniu l'exemple correcte:
void (A:: * pFunc) (void) = & A:: func1;
Quan provem d'utilitzar-lo per trucar a aquest mètode, tornarem a produir un error. La raó d’aquest error és que un objecte ha de cridar un mètode objecte. Per tant, creem un objecte per anomenar-lo:
A a;
a. * pFunc ();
Aquesta vegada no hi ha problema. Per tant, hi ha classe de delegat a Delegate.h.
plantilla
middleware de classe:: Delegat: middleware públic:: interfície:: IDelegat {public: Delegat (objecte T *, buit (mètode T:: *) (buit *)); void invoke (void * args); protegit: T * _objecte; void (mètode T:: * _) (void *); }; plantilla middleware en línia:: Delegat:: Delegat (objecte T *, void (mètode T:: *) (void *)): _objecte (objecte), _method (mètode) {} plantilla middleware nul en línia: Delegate:: invoke (void * args) {(_object -> * _ method) (args); }
Com que la classe Delegat és una classe de plantilla, el que significa que Delegat és diferent a Delegat, com fer-los apuntar amb un punter tenen el mateix tipus? La resposta és interfície, de manera que hi ha una interfície IDelegate a IDelegate.h.
middleware de classe:: interface:: IDelegate {
públic: invocar el buit virtual (void * args) = 0; };
A la classe PIR Sensor i Loudness Sensor, hi ha una variable anomenada _delegates que s’utilitza per emmagatzemar el punter de delegats i hi ha un mètode anomenat invokeAllDelegates () que s’utilitza per invocar tots els delegats de _delegates, s’anomenarà mètode measure ().
NOTA: Mètodes de delegació, com changeAnimation (), changeSpeed () i changeColor () es cridaran a la interrupció del temporitzador 2, així que NO utilitzeu delay () ni cap altra funció basada en la interrupció.
Recomanat:
Rgb Pixel Christmas Light Show Part 1: 7 passos
Rgb Pixel Christmas Light Show Part 1: En aquest instrucable, us mostraré com construir un espectacle de llum de píxels RGB. Hi ha MOLT per cobrir. De fet, probablement ho dividiré en aproximadament 3-5 instrucables diferents. Aquest serà sobre els conceptes bàsics. Tens molta lectura
Rgb Pixel Christmas Light Show Part 2: Xlights: 7 passos
Rgb Pixel Christmas Light Show Part 2: Xlights: En aquesta instrucció, us mostraré com seqüenciar la vostra primera cançó. Ara, si no heu vist la part 1, us recomano que la consulteu aquí. Ara, quan construïsca i programis un espectacle de llums de Nadal, el 75% de les vegades estaràs al teu seqüenciador
Rgb Pixel Christmas Light Show Part 3: Falcon Player (fpp): 8 passos
Rgb Pixel Christmas Light Show Part 3: Falcon Player (fpp): En aquest insctrucable, us mostraré com configurar Falcon player, que és un reproductor d’espectacles, en un raspberry pi. Si voleu veure la part 1 d'aquesta sèrie, feu clic aquí i feu clic aquí per a la part 2 amb xlights. Llavors, què és falcon player? Bàsicament es necessita
Music Box With Light Show: 9 passos (amb imatges)
Music Box With Light Show: hola i benvinguts, en aquest tutorial us mostrarem com podeu crear la vostra pròpia caixa de música amb un espectacle de llum inclòs. Tot el que necessiteu és una funda buida. Vam agafar un cas que normalment s’utilitza per a eines. En aquest projecte podeu ser molt creatiu, de manera que no necessiteu
Arduino Christmas Cheer !: 5 Passos (amb imatges)
Arduino Christmas Cheer !: Tissar la temporada per enganxar Arduino's en llocs festius, i quin millor lloc que un arbre de Nadal! En aquest projecte, farem un arbre de Nadal que pugui cantar un munt de cançons de Nadal diferents i il·luminar juntament amb el mu