Orodha ya maudhui:

Nuru ya furaha ya Muziki wa Krismasi: Hatua 4
Nuru ya furaha ya Muziki wa Krismasi: Hatua 4

Video: Nuru ya furaha ya Muziki wa Krismasi: Hatua 4

Video: Nuru ya furaha ya Muziki wa Krismasi: Hatua 4
Video: MBINGUNI NI FURAHA // MSANII MUSIC GROUP // SKIZA 5437493 to 811 2024, Novemba
Anonim
Nuru ya furaha ya Muziki wa Krismasi
Nuru ya furaha ya Muziki wa Krismasi

Krismasi Njema! Je! Unataka kuwa na mti wa Krismasi ambao unaweza kushirikiana nawe?

Hatua ya 1: Vitu vinavyotumiwa katika Mradi huu

Vipengele vya vifaa

  • Seeeduino V4.2
  • Shield ya Msingi V2
  • Grove - Sensor ya Mwendo wa PIR inayoweza kurekebishwa
  • Grove - Sura ya Sauti
  • Grove - WS2813 RGB LED Strip Waterproof - 60 LED / m - 1m

Programu za programu na huduma za mkondoni

Arduino IDE

Hatua ya 2: Uunganisho wa vifaa

Uunganisho wa vifaa
Uunganisho wa vifaa

Unganisha sensorer ya PIR, Sensor ya Loudness na ukanda wa LED kwenye bandari ya Base Shield D2, A0 na D6 kando. Chomeka Ngao ya Msingi kwa Seeduino, yote yamefanywa.

Hatua ya 3: Programu ya Programu

Maktaba zinazofuata chini zinahitaji kusanikishwa kabla ya programu, tafadhali pakua na uiingize kwa IDE yako ya Arduino kwa mikono:

  • Umeongoza_Strip
  • MsTimer2
  • Arduino_Vector

Ili kuifanya nambari iwe fupi zaidi, tumeifunga. Darasa la CheerLight ni darasa la maombi ya mradi huu.

maombi ya darasa:: CheerLight

: maombi ya umma:: interface:: IApplication {public: void setup (batili); kitanzi batili (batili); batili setPIRSensorPin (uint8_t pini); utupu setLoudnessSensorPin (uint8_t pini); Vipimo batili Sensors (batili); mabadiliko batiliUhuishaji (batili * args); mabadiliko ya batili kasi (tupu * args); mabadiliko batili Rangi (batili * args); maombi tuli:: CheerLight * GetInstance (batili); kulindwa: dereva:: LEDStrip _ledStrip; dereva:: PIRSensor _pirSensor; dereva:: LoudnessSensor _loudnessSensor; uint8_t _anionation; middleware:: Mjumbe _detectedDelegate; vifaa vya katikati:: Mjumbe _absoluteLoudnessDelegate; vifaa vya kati:: Mjumbe _relativeLoudnessDelegate; CheerLight (batili); maombi tuli:: CheerLight _instance; };

Darasa la CheerLight liliundwa na Sampuli za Singleton, ambayo inamaanisha kuna mfano mmoja tu kwa hiyo, unaweza kupiga CheerLight:: getInstance () kwa tukio hilo. Ikiwa muunganisho wako wa Sensorer ni tofauti na Muunganisho wa Vifaa, unaweza kuzibadilisha kwa kupiga njia za setPIRSensorPin () na setLoudnessSensorPin ().

Picha
Picha

Tunapendekeza njia ya kupiga simu ya Sensors () katika kipima muda ili kufanya sensorer ipimwe kwa wakati unaofaa, lakini kupiga simu changeAnimation (), changeSpeed () au changeColor () njia sio lazima. Wataitwa kupitia Wajumbe wakati sensorer inapimwa.

Mjumbe ni nini?

Kama tunavyojua, tunaweza kutangaza kiboreshaji cha kazi na kuifanya ionyeshe kazi katika C:

utupu func1 (utupu);

batili (* pFunc) (batili) = func1;

na itumie kuita kazi iliyoelekezwa kwake

pFunc ();

Lakini kuna tofauti katika C ++, ikiwa unajaribu kukusanya nambari ifuatayo:

darasa A {

umma: utupu func1 (utupu); }; utupu (* pFunc) (utupu) = & A:: func1;

mkusanyaji ataripoti kosa la ubadilishaji wa aina, hapa kuna mfano sahihi:

batili (A:: * pFunc) (batili) = & A:: func1;

Tunapojaribu kuitumia kuita njia hiyo, kosa tena. Sababu ya kosa hilo ni kwamba njia ya kitu lazima iitwe na kitu. Kwa hivyo tunaunda kitu kuiita:

A;

* pFunc ();

Wakati huu hakuna shida. Kwa hivyo kuna darasa la Ujumbe katika Delegate.h.

kiolezo

class middleware:: Delegate: publicwareware:: interface:: IDgate {public: Delegate (T * kitu, batili (T:: * method) (void *)); ombi batili (batili * args); kulindwa: T * _ject; batili (T:: * _ njia) (batili *); }; template inline middleware:: Delegate:: Delegate (T * kitu, batili (T:: * method) (void *)): _object (object), _method (method) {} template inline void middleware:: Delegate:: ombi (batili * args) {(_object -> * _ njia) (args); }

Kwa sababu darasa la Ujumbe ni darasa la templeti, ambayo inamaanisha kuwa Ujumbe ni tofauti kwa Ujumbe, jinsi ya kuwafanya waelekezwe na pointer kuwa na aina moja? Jibu ni kiolesura, kwa hivyo kuna interface ya IDelegate katika IDelegate.h.

darasa la kati vifaa:: kiolesura:: IDelegate {

umma: ombi la utupu wa kweli (batili * args) = 0; };

Katika darasa la Sura ya Sura ya PIR na Loudness, kuna tofauti inayoitwa _delegates inayotumika kuhifadhi pointer ya Wajumbe, na kuna njia inayoitwa invokeAllDelegates () inayotumiwa kuomba Wajumbe wote katika _delegates, itaitwa kwa kipimo () njia.

KUMBUKA: Njia za kukabidhi, kama vile changeAnimation (), changeSpeed () na changeColor () zitaitwa katika timer2 kukatiza, kwa hivyo USITUMIE kuchelewesha () au kazi nyingine inayotegemea kukatiza ndani yake.

Ilipendekeza: