Sisällysluettelo:
- Vaihe 1: Tässä projektissa käytetyt asiat
- Vaihe 2: Laitteistoyhteys
- Vaihe 3: Ohjelmointi
- Vaihe 4: Käyttö
Video: Joulumusiikin piristysvalo: 4 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Hyvää joulua! Haluatko joulukuusi, joka voi olla vuorovaikutuksessa kanssasi?
Vaihe 1: Tässä projektissa käytetyt asiat
Laitteiston osat
- Seeeduino V4.2
- Pohjakilpi V2
- Grove - Säädettävä PIR -liiketunnistin
- Grove - Loudness -anturi
- Grove - WS2813 RGB LED -nauha Vedenpitävä - 60 LED/m - 1 m
Ohjelmistosovellukset ja verkkopalvelut
Arduino IDE
Vaihe 2: Laitteistoyhteys
Liitä PIR -anturi, voimakkuusanturi ja LED -nauha Base Shieldin portteihin D2, A0 ja D6 erikseen. Liitä Base Shield Seeduinoon, kaikki tehty.
Vaihe 3: Ohjelmointi
Seuraavat kirjastot on asennettava ennen ohjelmointia, lataa ja tuo ne Arduino IDE -laitteeseen manuaalisesti:
- LED-nauha
- MsTimer2
- Arduino_Vektori
Jotta koodi olisi lyhyempi, olemme pakanneet sen. CheerLight -luokka on tämän projektin sovellusluokka.
luokkasovellus:: CheerLight
: julkinen sovellus:: käyttöliittymä:: IApplication {public: void setup (void); tyhjä silmukka (tyhjä); mitätön setPIRSensorPin (nasta uint8_t); void setLoudnessSensorPin (uint8_t -nasta); mitätön mittausanturit (mitätön); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); staattinen sovellus:: CheerLight * getInstance (mitätön); suojattu: kuljettaja:: LEDStrip _ledStrip; ohjain:: PIRSensor _pirSensor; ohjain:: LoudnessSensor _loudnessSensor; uint8_t _animaatio; väliohjelmisto:: Delegoi _detectedDelegate; väliohjelmisto:: Delegoi _absoluteLoudnessDelegate; väliohjelmisto:: Delegoi _relativeLoudnessDelegate; CheerLight (mitätön); staattinen sovellus:: CheerLight _instance; };
CheerLight -luokan on suunnitellut Singleton Patterns, mikä tarkoittaa, että sille on vain yksi esiintymä. Voit kutsua CheerLight:: getInstance () tähän tapaukseen. Jos anturien yhteys eroaa laitteistoyhteydestä, voit muuttaa niitä kutsumalla setPIRSensorPin () - ja setLoudnessSensorPin () -menetelmiä.
Suosittelemme kutsumaan meetSensors () -menetelmää ajastimessa keskeyttämään, jotta anturit mitataan ajoissa, mutta changeAnimation () -, changeSpeed () - tai changeColor () -menetelmiä ei tarvita manuaalisesti. Heille soitetaan edustajien kautta, kun antureita mitataan.
Mikä on valtuutettu?
Kuten me kaikki tiedämme, voimme julistaa funktio -osoittimen ja asettaa sen osoittamaan funktion C: ssä:
void func1 (mitätön);
mitätön (*pFunc) (mitätön) = func1;
ja käytä sitä kutsuaksesi toiminnon, johon se viittasi
pFunc ();
Mutta C ++: ssa on eroja, jos yrität koota seuraavan koodin:
luokka A {
julkinen: void func1 (mitätön); }; void (*pFunc) (void) = & A:: func1;
kääntäjä ilmoittaa tyyppimuunnosvirheen, tässä on oikea esimerkki:
mitätön (A::*pFunc) (mitätön) = & A:: func1;
Kun yritämme käyttää sitä kutsumaan tätä menetelmää, virhe toistuu. Syy tähän virheeseen on, että objektin on kutsuttava objektimenetelmä. Luomme siis objektin kutsumaan sitä:
A a;
a.*pFunc ();
Tällä kertaa ei ongelmaa. Joten Delegate -luokassa on Delegate -luokka. H.
sapluuna
luokan väliohjelmisto:: Delegoi: julkinen väliohjelmisto:: käyttöliittymä:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void invoke (void * args); suojattu: T * _objekti; mitätön (T:: *_ menetelmä) (mitätön *); }; malli sisäinen väliohjelmisto:: Delegoi:: Delegoi (T *objekti, mitätön (T:: *menetelmä) (void *)): _objekti (objekti), _metodi (menetelmä) {} malli inline void väliohjelma:: Delegoi:: kutsu (void * args) {(_objekti-> * _ menetelmä) (args); }
Koska Delegate -luokka on malliluokka, mikä tarkoittaa, että Delegate on ero Delegate -ryhmään, kuinka saada heidät osoittamaan osoittimella saman tyyppisiä? Vastaus on käyttöliittymä, joten IDelegate -käyttöliittymä on IDelegate.h -sivustossa.
luokan väliohjelmisto:: käyttöliittymä:: IDelegate {
public: virtual void invoke (void * args) = 0; };
PIR -anturin ja Loudness -anturin luokassa on muuttuja nimeltä _delegates, jota käytetään delegaattien osoittimen tallentamiseen, ja on olemassa menetelmä nimeltä invokeAllDelegates (), jota käytetään kutsumaan kaikki _delegates -edustajat, sitä kutsutaan mitta () -menetelmäksi.
HUOMAUTUS: Delegoida menetelmiä, kuten changeAnimation (), changeSpeed () ja changeColor (), kutsutaan timer2 keskeytyksessä, joten ÄLÄ käytä viivettä () tai muita keskeytyspohjaisia toimintoja siinä.
Suositeltava:
DIY Raspberry Pi Downloadbox: 4 vaihetta
DIY Raspberry Pi Downloadbox: Löydätkö usein itsesi lataamasta suuria tiedostoja, kuten elokuvia, torrentteja, kursseja, TV -sarjoja jne., Niin tulet oikeaan paikkaan. Tässä Instructable -ohjelmassa muuttaisimme Raspberry Pi zero -laitteemme latauskoneeksi. Joka voi ladata minkä tahansa
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
4 vaihetta akun sisäisen vastuksen mittaamiseksi: 4 vaihetta
4 vaihetta akun sisäisen vastuksen mittaamiseksi: Tässä on 4 yksinkertaista vaihetta, joiden avulla voit mitata taikinan sisäisen vastuksen