Sadržaj:
- Korak 1: Stvari koje se koriste u ovom projektu
- Korak 2: Povezivanje hardvera
- Korak 3: Programiranje softvera
- Korak 4: Operacija
Video: Božićna muzika Cheer Light: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Sretan božić! Želite li imati božićno drvce koje može komunicirati s vama?
Korak 1: Stvari koje se koriste u ovom projektu
Hardverske komponente
- Seeeduino V4.2
- Base Shield V2
- Grove - Podesivi PIR senzor pokreta
- Grove - Senzor glasnoće
- Grove - WS2813 RGB LED traka Vodootporna - 60 LED/m - 1m
Softverske aplikacije i mrežne usluge
Arduino IDE
Korak 2: Povezivanje hardvera
Povežite PIR senzor, senzor glasnoće i LED traku odvojeno na priključke D2, A0 i D6 Base Shield -a. Uključite osnovni štit u Seeduino, sve je gotovo.
Korak 3: Programiranje softvera
Biblioteke koje slijede trebaju se instalirati prije programiranja, preuzmite ih i uvezite ručno u svoj Arduino IDE:
- Led_Strip
- MsTimer2
- Arduino_Vector
Kako bismo kôd učinili sažetijim, zapakirali smo ga. Klasa CheerLight je klasa aplikacije ovog projekta.
klasa aplikacija: CheerLight
: javna aplikacija:: sučelje:: IApplication {javno: void setup (void); void loop (void); void setPIRSensorPin (uint8_t pin); void setLoudnessSensorPin (uint8_t pin); senzori void mjera (void); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); statička aplikacija:: CheerLight * getInstance (void); zaštićeno: upravljački program:: LEDStrip _ledStrip; upravljački program:: PIRSensor _pirSensor; driver:: LoudnessSensor _loudnessSensor; uint8_t _animation; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (void); statička aplikacija:: CheerLight _instance; };
Klasu CheerLight dizajnirali su Singleton Patterns, što znači da postoji samo jedna instanca za nju, koju možete pozvati CheerLight:: getInstance () u tu instancu. Ako je veza vašeg senzora drugačija od veze s hardverom, možete ih promijeniti pozivanjem metoda setPIRSensorPin () i setLoudnessSensorPin ().
Preporučujemo pozivanje metode mjeraSensors () u prekidu tajmera kako bi se senzori izmjerili pravovremeno, ali pozivanje metoda changeAnimation (), changeSpeed () ili changeColor () ručno nije potrebno. Oni će biti pozvani preko delegata kada se izmjere senzori.
Šta je delegat?
Kao što svi znamo, možemo deklarirati pokazivač funkcije i učiniti da pokazuje na funkciju u C:
void func1 (void);
void (*pFunc) (void) = func1;
i upotrijebite ga za pozivanje funkcije na koju je ukazao
pFunc ();
Ali postoje razlike u C ++, ako pokušate kompajlirati kôd slijedeći:
klasa A {
javno: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
kompajler će prijaviti grešku konverzije tipa, evo pravog primjera:
void (A::*pFunc) (void) = & A:: func1;
Kada pokušamo koristiti to za pozivanje te metode, opet greška. Razlog za tu grešku je taj što objekt-metod mora pozvati objekt. Stoga stvaramo objekt koji će ga nazvati:
Aa;
a.*pFunc ();
Ovaj put nema problema. Dakle, postoji klasa Delegate u Delegate.h.
predložak
class middleware:: Delegate: javni middleware:: sučelje:: IDelegate {public: Delegate (T *objekt, void (T:: *metoda) (void *)); void invoke (void * args); zaštićeno: T * _objekt; void (T:: *_ metoda) (void *); }; predložak inline middleware:: Delegate:: Delegate (T *objekt, void (T:: *metoda) (void *)): _object (objekt), _method (metoda) {} predložak inline void middleware:: Delegate:: invoke (void * args) {(_object-> * _ method) (args); }
Pošto je klasa delegata klasa predloška, što znači da je delegat razlika u odnosu na delegata, kako ih natjerati da budu pokazivači na isti tip? Odgovor je sučelje, pa postoji IDelegate sučelje u IDelegate.h.
class middleware:: sučelje:: IDelegate {
javno: pozivanje virtualne praznine (void * args) = 0; };
U klasi PIR senzora i senzora glasnoće postoji varijabla pod nazivom _delegates koja se koristi za spremanje pokazivača na delegate, a postoji i metoda pod nazivom invokeAllDelegates () koja se koristi za dozivanje svih delegata u _delegates, bit će pozvana u metodi mjera ().
NAPOMENA: Metode delegiranja, kao što su changeAnimation (), changeSpeed () i changeColor () bit će pozvane u prekidu timer2, stoga NEMOJTE koristiti delay () ili neku drugu funkciju zasnovanu na prekidima.
Preporučuje se:
Plesna muzika s kovčezima pomoću Arduina: 6 koraka
Plesna muzika u kovčegu pomoću Arduina: U ovom vodiču ću vam reći kako možete koristiti Arduino za stvaranje muzike koristeći samo zvučnik (nije potreban MP3 modul). Prvo pogledajte ovaj video vodič
Jednostavna muzika zujalice: 6 koraka
Jednostavna muzika zujalice: Jednostavna biblioteka za izlaz vlastitih pjesama s Arduinom putem zujalice ili zvučnika. Mali primjer pjesme "que; praeludium" by Johann Sebastian Bach
Muzika s Arduinom i relejem: 6 koraka
Muzika s Arduinom i relejem: u ovom tutorijalu pokazat ću vam kako stvarati glazbu pomoću releja i Arduino zanimljivog projekta prilagođenog početnicima
Astronomija Kovčeg Ples Meme muzika Koristeći Arduino Uno: 5 koraka
Astronomia Plesni kovčeg Meme Muzika pomoću Arduino Uno: Ovaj blog smo vam pokazali Astronomia Coffin Dance Melonce s Arduino UnoAko svi znate o provlačenju mema o astronomiji u kovčegu, pa sam odlučio napraviti ovu melodiju koristeći arduino uno Evo koraka i potrepština koje se koriste u ovom projektu
Arduino LED muzika: 6 koraka
Arduino LED muzika: Ovo je moj Arduino projekt. To je VU mjerač, gdje LED diode svijetle u skladu sa melodijom, na precizniji način da se kaže jačina muzike. Sastoji se od ploče za detekciju zvuka i 10 LED -ova različitih boja koje prikazuju mjerač. Oglašavam i