Satura rādītājs:
- 1. darbība. Šajā projektā izmantotās lietas
- 2. darbība. Aparatūras savienojums
- 3. solis: programmatūras programmēšana
- 4. darbība: darbība
Video: Ziemassvētku mūzikas uzmundrināšanas gaisma: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Priecīgus Ziemassvētkus! Vai vēlaties, lai Ziemassvētku eglīte varētu ar jums mijiedarboties?
1. darbība. Šajā projektā izmantotās lietas
Aparatūras komponenti
- Seeeduino V4.2
- Bāzes vairogs V2
- Grove - regulējams PIR kustības sensors
- Grove - skaļuma sensors
- Grove - WS2813 RGB LED sloksne Ūdensizturīga - 60 LED/m - 1 m
Programmatūras lietotnes un tiešsaistes pakalpojumi
Arduino IDE
2. darbība. Aparatūras savienojums
Pievienojiet PIR sensoru, skaļuma sensoru un LED sloksni atsevišķi Base Shield ligzdai D2, A0 un D6. Pievienojiet bāzes vairogu Seeduino, viss ir izdarīts.
3. solis: programmatūras programmēšana
Tālāk norādītajām bibliotēkām ir jāinstalē pirms programmēšanas, lūdzu, lejupielādējiet un importējiet tās savā Arduino IDE manuāli:
- Led_Strip
- MsTimer2
- Arduino_Vector
Lai kods būtu kodolīgāks, mēs to esam iesaiņojuši. CheerLight klase ir šī projekta pielietojuma klase.
klases pieteikums:: CheerLight
: publiska lietojumprogramma:: saskarne:: IApplication {public: void setup (void); tukša cilpa (tukša); void setPIRSensorPin (taustiņš uint8_t); void setLoudnessSensorPin (uint8_t pin); anulēts pasākumsSensors (anulēts); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); statiska lietojumprogramma:: CheerLight * getInstance (anulēts); aizsargāts: draiveris:: LEDStrip _ledStrip; vadītājs:: PIRSensor _pirSensor; draiveris:: LoudnessSensor _loudnessSensor; uint8_t _animācija; starpprogrammatūra:: Deleģēt _detectedDelegate; starpprogrammatūra:: Deleģēt _absoluteLoudnessDelegate; starpprogrammatūra:: Deleģēt _relativeLoudnessDelegate; CheerLight (tukšs); statiska lietojumprogramma:: CheerLight _instance; };
CheerLight klasi izstrādāja Singleton Patterns, kas nozīmē, ka tam ir tikai viens gadījums, uz šo gadījumu varat izsaukt CheerLight:: getInstance (). Ja jūsu sensoru savienojums atšķiras no aparatūras savienojuma, varat tos mainīt, izsaucot metodes setPIRSensorPin () un setLoudnessSensorPin ().
Mēs iesakām izsaukt metodi meetSensors (), lai taimeris pārtrauktu, lai sensori tiktu mērīti savlaicīgi, bet izsaucot changeAnimation (), changeSpeed () vai changeColor () metodes manuāli nav nepieciešamas. Mērot sensorus, viņi tiks izsaukti, izmantojot delegātus.
Kas ir delegāts?
Kā mēs visi zinām, mēs varam deklarēt funkciju rādītāju un likt tam norādīt uz funkciju C:
void func1 (anulēts);
tukšs (*pFunc) (tukšs) = func1;
un izmantojiet to, lai izsauktu funkciju, uz kuru tas norādīja
pFunc ();
Bet C ++ ir atšķirības, ja mēģināt apkopot kodu šādi:
A klase {
publisks: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
kompilators ziņos par tipa pārveidošanas kļūdu, šeit ir īstais piemērs:
void (A::*pFunc) (void) = & A:: func1;
Mēģinot to izmantot, lai izsauktu šo metodi, atkal rodas kļūda. Šīs kļūdas iemesls ir tāds, ka objektam ir jāizsauc objekta metode. Tātad mēs izveidojam objektu, lai to sauktu:
A a;
a.*pFunc ();
Šoreiz nekādu problēmu. Tātad Delegate.h ir Delegate klase.
veidne
klases starpprogrammatūra:: Deleģēt: publiska starpprogrammatūra:: interfeiss:: IDelegate {public: Delegate (T *objekts, anulēts (T:: *metode) (void *)); void invoke (void * args); aizsargāts: T * _objekts; void (T:: *_ metode) (void *); }; veidne inline starpprogrammatūra:: Deleģēt:: Deleģēt (T *objekts, anulēts (T:: *metode) (void *)): _objekts (objekts), _metode (metode) {} veidne inline void starpprogrammatūra:: Deleģēt:: izsaukt (void * args) {(_objekts-> * _ metode) (args); }
Tā kā delegātu klase ir veidņu klase, kas nozīmē, ka delegāts ir atšķirība no delegāta, kā padarīt tos norādītus ar rādītāju vienāda veida? Atbilde ir interfeiss, tāpēc IDelegate.h ir IDelegate interfeiss.
klases starpprogrammatūra:: interfeiss:: IDelegate {
public: virtual void invoke (void * args) = 0; };
PIR sensora un skaļuma sensora klasē ir mainīgais ar nosaukumu _delegates, ko izmanto, lai saglabātu delegātu rādītāju, un ir metode ar nosaukumu invokeAllDelegates (), ko izmanto, lai izsauktu visus delegātus _delegates, tā tiks saukta par meet () metodi.
PIEZĪME. Deleģēšanas metodes, piemēram, changeAnimation (), changeSpeed () un changeColor (), tiks izsauktas taimera 2 pārtraukumā, tāpēc NELIETOJIET tajā kavēšanos () vai citu uz pārtraukšanu balstītu funkciju.
Ieteicams:
Elpojošā Ziemassvētku eglīte - Arduino Ziemassvētku gaismas kontrolieris: 4 soļi
Elpojošā Ziemassvētku eglīte-Arduino Ziemassvētku gaismas kontrolieris: Nav laba ziņa, ka manas 9 pēdas iepriekš apgaismotās mākslīgās Ziemassvētku eglītes vadības kārba salūza pirms Ziemassvētkiem , un ražotājs nenodrošina rezerves daļas. Šis neizprotamais parāda, kā padarīt savu LED gaismas draiveri un kontrolieri, lai izmantotu Ar
Mūzikas montētājs: integrēts virtuālais mūzikas instruments ar bloķētu skārienjutīgu sensoru: 4 soļi
Mūzikas montētājs: integrēts virtuālais mūzikas instruments ar bloķētu skārienjutīgu sensoru: ir daudz cilvēku, kuri vēlas iemācīties spēlēt mūzikas instrumentu. Diemžēl daži no viņiem to nesāk augstās instrumentu cenas dēļ. Pamatojoties uz to, mēs nolēmām izveidot integrētu virtuālo mūzikas instrumentu sistēmu, lai samazinātu sākuma budžetu
Zāles efekta sensors: Ziemassvētku mūzikas kaste: 4 soļi
Zāles efekta sensors: Ziemassvētku mūzikas kaste: šī ir mūzikas kastīte, kas atskaņo mūziku pēc atvēršanas (skatieties video!). Tas ir lielisks, īpašs un unikāls veids, kā iesaiņot dāvanas savam īpašajam! Tas izmanto zāles efekta sensoru, lai pārbaudītu, vai vāks ir atvērts magnētiskā lauka trūkuma dēļ
Mūzikas reaktīvā gaisma -- Kā padarīt ļoti vienkāršu mūzikas reaktīvo gaismu, lai padarītu darbvirsmu pievilcīgu: 5 soļi (ar attēliem)
Mūzikas reaktīvā gaisma || Kā padarīt ļoti vienkāršu mūzikas reaktīvo gaismu, lai padarītu darbvirsmu satriecošu. Hei, puiši, šodien mēs izveidosim ļoti interesantu projektu. Šodien mēs veidosim mūzikas reaktīvo gaismu. LED mainīs spilgtumu atbilstoši bass, kas patiesībā ir zemfrekvences audio signāls. To ir ļoti vienkārši izveidot. Mēs
Ziemassvētku kaste: Arduino/ioBridge interneta kontrolētas Ziemassvētku gaismas un mūzikas šovs: 7 soļi
Ziemassvētku kaste: Arduino/ioBridge interneta kontrolētas Ziemassvētku gaismas un mūzikas šovs: Mans Ziemassvētku kastes projekts sastāv no interneta kontrolētām Ziemassvētku gaismām un mūzikas šova. Ziemassvētku dziesmu var pieprasīt tiešsaistē, kas pēc tam tiek ievietota rindā un atskaņota pieprasītajā secībā. Mūzika tiek pārraidīta uz FM statusa