Sadržaj:
- Korak 1: Stvari korištene u ovom projektu
- Korak 2: Povezivanje hardvera
- Korak 3: Programiranje softvera
- Korak 4: Operacija
Video: Božićna glazba Cheer Light: 4 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:36
Sretan Božić! Želite li imati božićno drvce koje može komunicirati s vama?
Korak 1: Stvari korištene u ovom projektu
Hardverske komponente
- Seeeduino V4.2
- Osnovni štit 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
Spojite PIR osjetnik, osjetnik glasnoće i LED traku zasebno na priključke D2, A0 i D6 Base Shield -a. Uključite osnovni štit u Seeduino, sve je gotovo.
Korak 3: Programiranje softvera
Knjižnice koje slijede trebaju se instalirati prije programiranja, preuzmite ih i uvezite ručno u svoj Arduino IDE:
- LED traka
- Gđa Timer 2
- Arduino_Vector
Kako bismo kôd učinili sažetijim, zapakirali smo ga. Klasa CheerLight je aplikacijska klasa ovog projekta.
klasa aplikacija: CheerLight
: javna aplikacija:: sučelje:: IApplication {public: void setup (void); void petlja (void); void setPIRSensorPin (uint8_t pin); void setLoudnessSensorPin (uint8_t pin); void mjeračiSenzori (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 _animacija; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (ništavno); statička primjena:: 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ših senzora različita od Hardverske veze, možete ih promijeniti pozivanjem metoda setPIRSensorPin () i setLoudnessSensorPin ().
Preporučujemo pozivanje metode mjeraSensors () u vremenskom prekidu kako bi se senzori izmjerili pravovremeno, ali ručno pozivanje metoda changeAnimation (), changeSpeed () ili changeColor () nije potrebno. Pozvat će ih putem delegata kada se izmjere senzori.
Što 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 ();
No, postoje razlike u C ++, ako pokušate sastaviti kôd slijedeći:
razred A {
javno: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
prevoditelj će prijaviti pogrešku pretvorbe tipa, evo pravog primjera:
void (A::*pFunc) (void) = & A:: func1;
Kad ga pokušamo koristiti za pozivanje te metode, opet greška. Razlog za tu pogrešku je taj što objekt-metodu mora pozvati objekt-metoda. Stoga stvaramo objekt koji će ga nazvati:
A a;
a.*pFunc ();
Ovaj put bez 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); }
Budući da je klasa delegata predložak, što znači da je delegat razlika u odnosu na delegata, kako ih natjerati da pokazivač imaju isti tip? Odgovor je sučelje, pa postoji IDelegate sučelje u IDelegate.h.
klasa middleware:: sučelje:: IDelegate {
javno: dozivanje virtualne praznine (void * args) = 0; };
U klasi PIR Sensor i Loudness Sensor postoji varijabla pod nazivom _delegates koja se koristi za spremanje pokazivača na delegate, a postoji i metoda zvana 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čeni:
Plesna glazba s lijesovima pomoću Arduina: 6 koraka
Plesna glazba s lijesovima pomoću Arduina: U ovom vodiču ću vam reći kako možete koristiti Arduino za stvaranje glazbe koristeći samo zvučnik (nije potreban MP3 modul). Prvo pogledajte ovaj video vodič
Jednostavna glazba zujalice: 6 koraka
Jednostavna glazba zujalice: Jednostavna biblioteka za ispisivanje vlastitih pjesama s Arduinom putem zujalice ili zvučnika. Mali primjer pjesme " praeludium " Johanna Sebastiana Bacha
Glazba s Arduinom i relejem: 6 koraka
Glazba 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 Ples s lijesovima Meme Glazba pomoću Arduino Uno: 5 koraka
Astronomia Plesni kovčeg Meme Glazba pomoću Arduino Uno: Ovaj blog koji smo vam pokazali Astronomia Coffin Dance Melonce s Arduino UnoSvi svi znate o provlačenju mema o astronomiji u plesu na lijesovima pa sam odlučio napraviti ovu melodiju koristeći arduino uno Evo koraka i potrepština koje se koriste u ovom projektu
Božićna kutija: Arduino/ioBridge internetski kontrolirana božićna svjetla i glazbena predstava: 7 koraka
Xmas-box: Arduino/ioBridge internetski kontrolirana božićna svjetla i glazbeni show: Moj projekt xmas-box sastoji se od kontrolirane internetske božićne rasvjete i glazbene emisije. Božićna pjesma može se zatražiti putem interneta koja se zatim stavlja u red i pušta redoslijedom koji je zatražen. Glazba se prenosi na FM stat