Sisukord:
- Samm: selles projektis kasutatud asjad
- Samm: riistvaraühendus
- Samm: tarkvara programmeerimine
- 4. samm: toimimine
Video: Jõulumuusika rõõmurõõm: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Häid jõule! Kas soovite jõulupuu, mis saaks teiega suhelda?
Samm: selles projektis kasutatud asjad
Riistvara komponendid
- Seeeduino V4.2
- Aluskilp V2
- Grove - reguleeritav PIR -liikumisandur
- Grove - valjususe andur
- Grove - WS2813 RGB LED -riba Veekindel - 60 LED/m - 1 m
Tarkvararakendused ja võrguteenused
Arduino IDE
Samm: riistvaraühendus
Ühendage PIR -andur, valjususandur ja LED -riba Base Shieldi portidega D2, A0 ja D6 eraldi. Ühendage Base Shield Seeduinoga, kõik on tehtud.
Samm: tarkvara programmeerimine
Järgmised teegid tuleb enne programmeerimist installida, palun laadige need alla ja importige oma Arduino IDE -sse käsitsi:
- Led_Strip
- MsTimer2
- Arduino_Vektor
Koodi sisutihedamaks muutmiseks oleme selle pakkinud. CheerLight klass on selle projekti rakendusklass.
klassi rakendus:: CheerLight
: avalik rakendus:: liides:: IApplication {public: void setup (void); tühjusring (tühine); tühine setPIRSensorPin (tihvt uint8_t); tühine setLoudnessSensorPin (uint8_t pin); tühine mõõtSensorid (tühine); void changeAnimation (tühine * args); void changeSpeed (tühine * args); void changeColor (tühine * args); staatiline rakendus:: CheerLight * getInstance (tühine); kaitstud: draiver:: LEDStrip _ledStrip; juht:: PIRSensor _pirSensor; juht:: LoudnessSensor _loudnessSensor; uint8_t _animation; vahevara:: Delegaat _detectedDelegate; vahevara:: Delegeeri _absoluteLoudnessDelegate; vahevara:: Delegeeri _relativeLoudnessDelegate; CheerLight (tühine); staatiline rakendus:: CheerLight _instance; };
CheerLighti klassi kujundas Singleton Patterns, mis tähendab, et selle jaoks on ainult üks eksemplar, saate sellele eksemplarile helistada CheerLight:: getInstance (). Kui teie andurite ühendus erineb riistvaraühendusest, saate neid muuta, kutsudes meetodeid setPIRSensorPin () ja setLoudnessSensorPin ().
Soovitame taimeri katkestamise meetodi meetSensors () meetodil katkestada, et andurid õigeaegselt mõõta, kuid kutsuda changeAnimation (), changeSpeed () või changeColor () käsitsi pole vajalikud. Andurite mõõtmisel helistatakse neile delegaatide kaudu.
Mis on delegaat?
Nagu me kõik teame, saame deklareerida funktsiooni osuti ja suunata selle funktsioonile C:
void func1 (tühine);
tühine (*pFunc) (tühine) = func1;
ja kasutage seda funktsiooni kutsumiseks, millele osutas
pFunc ();
Kuid C ++ -is on erinevusi, kui proovite koostada koodi järgmiselt:
klass A {
avalik: void func1 (tühine); }; tühine (*pFunc) (tühine) = & A:: func1;
kompilaator teatab tüübi teisendamise veast, siin on õige näide:
tühine (A::*pFunc) (tühine) = & A:: func1;
Kui proovime seda kasutada selle meetodi kutsumiseks, ilmneb viga uuesti. Selle vea põhjus on see, et objekt peab kutsuma objekti-meetodi. Seega loome selle nimetamiseks objekti:
A a;
a.*pFunc ();
Seekord pole probleemi. Seega on delegaat.h klassis Delegate.
malli
klassi vahevara:: Delegaat: avalik vahevara:: liides:: IDelegate {avalik: Delegaat (T *objekt, tühine (T:: *meetod) (tühine *)); void invoke (void * args); kaitstud: T * _objekt; tühine (T:: *_ meetod) (tühine *); }; mall inline vahevara:: Delegeerimine:: Delegeerimine (T *objekt, tühine (T:: *meetod) (tühine *)): _objekt (objekt), _meetod (meetod) {} mall inline void vahevara:: Delegeeri:: kutsuda (tühine * args) {(_objekt-> * _ meetod) (args); }
Kuna delegaatklass on malliklass, mis tähendab, et delegaat on delegaadist erinev, siis kuidas panna neid kursoriga osutama sama tüüpi? Vastus on liides, nii et IDelegate.h -s on IDelegate liides.
klassi vahevara:: liides:: IDelegate {
avalik: virtuaalne tühjus kutsuda (void * args) = 0; };
PIR -anduri ja valjusussensori klassis on muutuja nimega _delegates, mida kasutatakse delegaatide kursori salvestamiseks, ja on olemas meetod nimega invokeAllDelegates (), mida kasutatakse kõigi delegaatide kutsumiseks _delegates, seda nimetatakse meetme () meetodiks.
MÄRKUS. Delegeerimismeetodeid, nagu changeAnimation (), changeSpeed () ja changeColor () kutsutakse sisse timer2 interrupt, seega ÄRGE kasutage selles viivitust () ega muud katkestuspõhist funktsiooni.
Soovitan:
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Akustiline levitatsioon Arduino Unoga samm-sammult (8 sammu): 8 sammu
Akustiline levitatsioon Arduino Uno abil samm-sammult (8 sammu): ultraheliheli muundurid L298N DC-naissoost adapteri toiteallikas isase alalisvoolupistikuga Arduino UNOBreadboard ja analoogpordid koodi teisendamiseks (C ++)
4G/5G HD -video otseülekanne DJI droonilt madala latentsusega [3 sammu]: 3 sammu
4G/5G HD-video otseülekanne DJI droonilt madala latentsusega [3 sammu]: Järgnev juhend aitab teil saada HD-kvaliteediga otseülekandeid peaaegu igalt DJI droonilt. FlytOSi mobiilirakenduse ja veebirakenduse FlytNow abil saate alustada drooni video voogesitust
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
4 sammu aku sisemise takistuse mõõtmiseks: 4 sammu
4 sammu aku sisemise takistuse mõõtmiseks: Siin on 4 lihtsat sammu, mis aitavad mõõta taigna sisemist takistust