Cuprins:
- Pasul 1: Lucruri utilizate în acest proiect
- Pasul 2: Conexiune hardware
- Pasul 3: Programare software
- Pasul 4: Operațiune
Video: Lumina de Crăciun pentru muzică de Crăciun: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Craciun Fericit! Vrei să ai un pom de Crăciun care să poată interacționa cu tine?
Pasul 1: Lucruri utilizate în acest proiect
Componente hardware
- Seeeduino V4.2
- Scutul de bază V2
- Grove - Senzor de mișcare PIR reglabil
- Grove - Senzor de sunet
- Grove - WS2813 RGB LED Strip Waterproof - 60 LED / m - 1m
Aplicații software și servicii online
IDE Arduino
Pasul 2: Conexiune hardware
Conectați senzorul PIR, senzorul de sunet și banda LED la portul D2, A0 și D6 al bazei Shield. Conectați Scutul de bază la Seeduino, gata.
Pasul 3: Programare software
Bibliotecile care urmează trebuie instalate înainte de programare, vă rugăm să le descărcați și să le importați manual în ID-ul dvs. Arduino:
- Led_Strip
- MsTimer2
- Arduino_Vector
Pentru a face codul mai concis, l-am ambalat. Clasa CheerLight este clasa de aplicație a acestui proiect.
aplicație de clasă:: CheerLight
: public application:: interface:: IApplication {public: void setup (void); bucla de gol (nul); void setPIRSensorPin (pin uint8_t); void setLoudnessSensorPin (uint8_t pin); void measureSensors (nul); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); aplicație statică:: CheerLight * getInstance (nul); protejat: driver:: LEDStrip _ledStrip; driver:: PIRSensor _pirSensor; driver:: LoudnessSensor _loudnessSensor; uint8_t _animare; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (nul); aplicație statică:: CheerLight _instance; };
Clasa CheerLight a fost proiectată de Singleton Patterns, ceea ce înseamnă că există o singură instanță pentru aceasta, puteți apela CheerLight:: getInstance () la acea instanță. Dacă conexiunea senzorilor dvs. diferă de conexiunea hardware, le puteți schimba apelând metodele setPIRSensorPin () și setLoudnessSensorPin ().
Vă recomandăm să apelați metoda MeasureSensors () în întreruperea temporizatorului pentru a face senzorii măsurați în timp util, dar apelarea manuală a metodelor changeAnimation (), changeSpeed () sau changeColor () nu este necesară. Acestea vor fi apelate prin delegați atunci când senzorii sunt măsurați.
Ce este un delegat?
După cum știm cu toții, putem declara un indicator de funcție și îl putem face să indice o funcție în C:
void func1 (void);
void (* pFunc) (void) = func1;
și folosiți-l pentru a apela funcția către care a arătat
pFunc ();
Dar există diferențe în C ++, dacă încercați să compilați codul următor:
clasa a {
public: void func1 (void); }; void (* pFunc) (void) = & A:: func1;
compilatorul va raporta o eroare de conversie de tip, iată exemplul potrivit:
void (A:: * pFunc) (void) = & A:: func1;
Când încercăm să o folosim pentru a apela metoda respectivă, greșim din nou. Motivul acestei erori este că o metodă obiect trebuie să fie apelată de un obiect. Deci, creăm un obiect pentru a-l numi:
A a;
a. * pFunc ();
De data aceasta nicio problemă. Deci, există clasa Delegate în Delegate.h.
șablon
middleware de clasă:: Delegate: middleware public:: interfață:: IDelegate {public: Delegate (obiect T *, void (metoda T:: *) (void *)); void invoke (void * args); protejat: T * _obiect; void (metoda T:: * _) (void *); }; middleware șablon inline:: Delegat:: Delegat (obiect T *, nul (metoda T:: *) (void *)): _object (obiect), _metodă (metodă) {} șablon inline nul middleware:: Delegat:: invocă (void * args) {(_object -> * _ method) (args); }
Deoarece clasa delegat este o clasă șablon, ceea ce înseamnă că delegatul este diferența față de delegat, cum să le faci să fie îndreptate prin pointer să aibă același tip? Răspunsul este interfață, deci există o interfață IDelegate în IDelegate.h.
middleware de clasă:: interfață:: IDelegate {
public: virtual nul invoke (void * args) = 0; };
În clasa PIR Sensor și Loudness Sensor, există o variabilă numită _delegates folosită pentru a stoca pointerul delegaților și există o metodă numită invokeAllDelegates () utilizată pentru a invoca toți delegații din _delegates, va fi numită metoda măsură ().
NOTĂ: metodele de delegare, cum ar fi changeAnimation (), changeSpeed () și changeColor () vor fi apelate în întreruperea timer2, deci NU utilizați delay () sau altă funcție bazată pe întreruperi în ea.
Recomandat:
Spectacol de lumină de Crăciun sincronizat cu muzica !: 4 pași
Spectacol de lumină de Crăciun sincronizat cu muzica !: În acest instructable, vă voi arăta cum să faceți un spectacol de lumină de Crăciun sincronizat cu muzică de Crăciun folosind pixeli RGB. Nu lăsați acest nume să vă sperie! Nu este prea greu să înveți cum să faci asta. Cu toate acestea, vă voi avertiza că acest lucru poate fi destul de
Respirarea pomului de Crăciun - Controler de lumină de Crăciun Arduino: 4 pași
Respirarea pomului de Crăciun - Controlerul de lumină de Crăciun Arduino: Nu este o veste bună faptul că cutia de control pentru bradul meu artificial de 9 ft pre-aprins s-a spart înainte de Crăciun , și producătorul nu oferă piese de schimb. Acest lucru de nepătruns arată cum să-ți faci propriul driver și controler de lumină LED să folosească Ar
Lumina reactivă pentru muzică -- Cum să faci lumină reactivă pentru muzică super simplă pentru a face desktop-ul grozav .: 5 pași (cu imagini)
Muzică lumină reactivă || Cum să facem muzică super simplă lumină reactivă pentru a face desktopul grozav. basul care este de fapt semnal audio de joasă frecvență. Este foarte simplu de construit. Vom
Cadru de lumină (pentru caseta de lumină pentru fotografii Tekjocks): 3 pași
Cadru de lumină (pentru Tekjocks Photography Light Box): Iată urmărirea pentru Cutia mea de lumină pentru fotografie. Nu am de gând să-l detaliaz pe acesta, deoarece se va reduce la dimensiunea tubului pe care îl veți determina, de ce dimensiune veți avea nevoie de hardware. Deci, acesta va fi un tutorial de bază. Voi fi postat
Lumini de Crăciun pentru muzică folosind Arduino: 9 pași (cu imagini)
Lumini de Crăciun pentru muzică Folosind Arduino: Eu și soția mea am vrut să creăm propriul nostru spectacol de muzică pentru lumini pentru ultimele sezoane de vacanță. Inspirați de cele două Instrucțiuni de mai jos, am decis să începem în sfârșit anul acesta și să ne decorăm RV-ul. Ne-am dorit un cont all-in-one