Talaan ng mga Nilalaman:
- Hakbang 1: Mga Bagay na Ginamit sa Project na Ito
- Hakbang 2: Koneksyon sa Hardware
- Hakbang 3: Programming ng Software
- Hakbang 4: Pagpapatakbo
Video: Christmas Music Cheer Light: 4 na Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Maligayang Pasko! Nais mo bang magkaroon ng isang Christmas tree na maaaring makipag-ugnay sa iyo?
Hakbang 1: Mga Bagay na Ginamit sa Project na Ito
Mga bahagi ng hardware
- Seeeduino V4.2
- Base Shield V2
- Grove - Adjustable PIR Motion Sensor
- Grove - Sensor ng Loudness
- Grove - WS2813 RGB LED Strip Waterproof - 60 LED / m - 1m
Mga software app at serbisyong online
Arduino IDE
Hakbang 2: Koneksyon sa Hardware
Ikonekta ang PIR Sensor, Loudness Sensor at LED strip sa port ng Base Shield na D2, A0 at D6 nang magkahiwalay. Plug Base Shield kay Seeduino, tapos na ang lahat.
Hakbang 3: Programming ng Software
Kailangang mag-install ang mga sumusunod na aklatan bago mag-program, mangyaring i-download at i-import ang mga ito sa iyong Arduino IDE nang manu-mano:
- Led_Strip
- MsTimer2
- Arduino_Vector
Upang mas gawing maikli ang code, na-pack na namin ito. Ang CheerLight class ay ang application class ng proyektong ito.
aplikasyon ng klase:: CheerLight
: pampublikong aplikasyon:: interface:: IApplication {public: void setup (void); walang bisa loop (walang bisa); void setPIRSensorPin (uint8_t pin); void setLoudnessSensorPin (uint8_t pin); walang bisa na panukalaSensor (walang bisa); walang bisa na pagbabagoAnimation (walang bisa * args); walang bisa na ChangeSpeed (walang bisa * args); walang bisa na ChangeColor (walang bisa * args); static application:: CheerLight * getInstance (walang bisa); protektado: driver:: LEDStrip _ledStrip; driver:: PIRSensor _pirSensor; driver:: LoudnessSensor _loudnessSensor; uint8_t _animation; middleware:: Delegate _detectedDelegate; middleware:: Magtalaga ng _absoluteLoudnessDelegate; middleware:: Magtalaga ng _relativeLoudnessDelegate; CheerLight (walang bisa); static application:: CheerLight _instance; };
Ang klase ng CheerLight ay dinisenyo ng Mga Singleton Pattern, na nangangahulugang mayroon lamang isang halimbawa para dito, maaari kang tumawag sa CheerLight:: getInstance () sa pagkakataong iyon. Kung ang koneksyon ng iyong Sensors ay magkakaiba sa Hardware Connection, maaari mong baguhin ang mga ito sa pamamagitan ng pagtawag sa mga pamamaraan ng setPIRSensorPin () at setLoudnessSensorPin ().
Inirekomenda namin ang paraan ng pagtawag sa mga panukalangSensor () sa timer na makagambala upang gumawa ng mga sensor na sinusukat nang napapanahon, ngunit ang pagtawag sa pagbabago ngAnimasyon (), manu-manong mga pagbabago naSpeed () o mga pamamaraan ng ChangeColor () na manu-mano ay hindi kinakailangan. Tatawagan sila sa pamamagitan ng mga Delegado kapag sinusukat ang mga sensor.
Ano ang isang Delegado?
Tulad ng alam nating lahat, maaari nating ideklara ang isang pointer ng pag-andar at ituro ito sa isang pagpapaandar sa C:
walang bisa func1 (walang bisa);
walang bisa (* pFunc) (walang bisa) = func1;
at gamitin ito upang tawagan ang pagpapaandar na itinuro nito
pFunc ();
Ngunit may mga pagkakaiba sa C ++, kung susubukan mong mag-compile ng sumusunod na code:
klase A {
pampubliko: void func1 (void); }; walang bisa (* pFunc) (walang bisa) = & A:: func1;
ang nag-uulat ay mag-uulat ng isang uri ng error sa conversion, narito ang tamang halimbawa:
walang bisa (A:: * pFunc) (walang bisa) = & A:: func1;
Kapag sinubukan naming gamitin ito upang tawagan ang pamamaraang iyon, muling magkamali. Ang dahilan para sa error na iyon ay ang isang object-method na dapat tawagan ng isang object. Gumagawa kami ng isang object upang tawagan ito:
Isang a;
a. * pFunc ();
This time walang problema. Kaya't mayroong klase ng Delegate sa Delegate.h.
template
class middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (T * object, void (T:: * method) (void *)); walang bisa na pag-uusap (walang bisa * args); protektado: T * _object; walang bisa (T:: * _ paraan) (walang bisa *); }; template inline middleware:: Delegate:: Delegate (T * object, void (T:: * method) (void *)): _object (object), _method (method) {} template inline void middleware:: Delegate:: invoke (void * args) {(_object -> * _ paraan) (args); }
Dahil ang klase ng Delegate ay isang klase ng template, na nangangahulugang ang Delegado ay pagkakaiba sa Delegate, kung paano sila maituro ng pointer na may parehong uri? Ang sagot ay interface, kaya mayroong interface ng IDelegate sa IDelegate.h.
class middleware:: interface:: IDelegate {
pampubliko: virtual void invoke (void * args) = 0; };
Sa klase ng PIR Sensor at Loudness Sensor, mayroong isang variable na pinangalanang _delegates na ginamit upang mag-imbak ng pointer ng Delegates, at mayroong isang pamamaraan na pinangalanang invokeAllDelegates () na ginamit upang ipatawag ang lahat ng mga Delegado sa _delegates, tatawagin ito sa sukat () na pamamaraan.
TANDAAN: Ang mga pamamaraan ng pagdelegado, tulad ng changeAnimation (), changeSpeed () at ChangeColor () ay tatawagan sa timer2 na makagambala, kaya HUWAG gumamit ng pagkaantala () o iba pang pag-andar batay sa nakagambala dito.
Inirerekumendang:
Mga DIY Christmas Musical Christmas Light (MSGEQ7 + Arduino): 6 na Hakbang (na may Mga Larawan)
Mga DIY Christmas Musical Christmas Lights (MSGEQ7 + Arduino): Kaya't bawat taon sinasabi ko na gagawin ko ito at hindi na ako makakagawa dito sapagkat marami akong ipinagpaliban. Ang 2020 ay isang taon ng pagbabago kaya sinasabi kong ito ang taon upang magawa ito. Kaya't sana ay magustuhan mo at gumawa ng iyong sariling musikal na mga ilaw ng Pasko. Ito ay magiging isang
Paghinga ng Christmas Tree - Arduino Christmas Light Controller: 4 Mga Hakbang
Paghinga ng Christmas Tree - Arduino Christmas Light Controller: Hindi magandang balita na ang control box para sa aking 9-ft na pre-lit na artipisyal na Christmas tree ay sinira bago ang Pasko, at ang tagagawa ay hindi nagbibigay ng mga kapalit na bahagi. Ipinapakita ng hindi masasalamin kung paano gumawa ng iyong sariling LED light driver at controller na gumagamit ng Ar
Arduino Christmas Cheer !: 5 Hakbang (na may Mga Larawan)
Arduino Christmas Cheer !: I-tiss ang panahon upang idikit ang Arduino sa mga maligaya na lugar, at kung anong mas mahusay na lugar kaysa sa isang Christmas tree! Sa proyektong ito, gagawa kami ng isang Christmas tree na maaaring kumanta ng isang bungkos ng iba't ibang mga kanta ng Pasko at sindihan kasabay ng mu
Pinapatakbo ng baterya na Mga Christmas Christmas Light: 3 Hakbang
Pinapatakbo ng baterya na mga Christmas Christmas Light: ang mga ilaw ng Pasko ay mabuti para sa higit pa sa dekorasyon ng iyong puno. Maaari kang gumawa ng isang sparkleball sa kanila. Ngunit paano kung nais mong i-hang ito mula sa iyong kisame? Gusto mong i-plug ang mga ilaw sa isang outlet at hindi ko alam ang tungkol sa iyo ngunit hindi ko
Mga Christmas Christmas Light na Itinakda sa Musika - Mga Choreographed Light ng Bahay: 15 Hakbang (na may Mga Larawan)
Ang Mga Christmas Christmas DIY ay Itinakda sa Musika - Mga Choreographed Light ng Bahay: Mga DIY Christmas Light na Itakda Sa Musika - Mga Choreographed House Lights Hindi Ito isang nagsisimula na DIY. Kakailanganin mo ng isang matatag na maunawaan ang electronics, circuity, BASIC program at pangkalahatang mga smart tungkol sa kaligtasan sa kuryente. Ang DIY na ito ay para sa isang bihasang tao kaya