Obsah:
- Krok 1: Veci použité v tomto projekte
- Krok 2: Pripojenie hardvéru
- Krok 3: Programovanie softvéru
- Krok 4: Prevádzka
Video: Svetlo na zdravie vianočnej hudby: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Veselé Vianoce! Chcete mať vianočný stromček, ktorý by s vami mohol interagovať?
Krok 1: Veci použité v tomto projekte
Hardvérové komponenty
- Seeeduino V4.2
- Základný štít V2
- Grove - nastaviteľný snímač pohybu PIR
- Grove - snímač hlasitosti
- Grove - WS2813 RGB LED pásik vodotesný - 60 LED/m - 1m
Softvérové aplikácie a online služby
Arduino IDE
Krok 2: Pripojenie hardvéru
Pripojte PIR senzor, snímač hlasitosti a LED pásik oddelene k portu D2, A0 a D6 základného štítu. Pripojte základný štít k Seeduinu, všetko hotové.
Krok 3: Programovanie softvéru
Nasledujúce knižnice je potrebné nainštalovať pred programovaním, stiahnite si ich a importujte do svojho Arduino IDE ručne:
- Led_Strip
- MsTimer2
- Arduino_Vector
Aby bol kód stručnejší, zabalili sme ho. Trieda CheerLight je aplikačnou triedou tohto projektu.
triedna aplikácia:: CheerLight
: verejná aplikácia:: rozhranie:: IAplikácia {public: void setup (void); prázdna slučka (prázdna); zrušiť setPIRSensorPin (pin uint8_t); neplatný setLoudnessSensorPin (pin uint8_t); neplatné opatrenie Senzory (prázdne); void changeAnimation (neplatné * args); void changeSpeed (neplatné * args); void changeColor (neplatné * args); statická aplikácia:: CheerLight * getInstance (neplatné); chránené: ovládač:: LEDStrip _ledStrip; ovládač:: PIRSensor _pirSensor; ovládač:: LoudnessSensor _loudnessSensor; uint8_t _animation; middleware:: Delegát _detectedDelegate; middleware:: Delegát _absoluteLoudnessDelegate; middleware:: Delegát _relativeLoudnessDelegate; CheerLight (prázdny); statická aplikácia:: CheerLight _inštancia; };
Triedu CheerLight navrhla spoločnosť Singleton Patterns, čo znamená, že pre ňu existuje iba jedna inštancia. Na túto inštanciu môžete zavolať CheerLight:: getInstance (). Ak sa pripojenie vašich senzorov líši od hardvérového pripojenia, môžete ich zmeniť volaním metód setPIRSensorPin () a setLoudnessSensorPin ().
Odporúčame použiť metódu MeasSensors () v prerušení časovača, aby boli senzory merané včas, ale manuálne volanie metód changeAnimation (), changeSpeed () alebo changeColor () nie je potrebné. Budú zavolaní prostredníctvom delegátov pri meraní senzorov.
Čo je to delegát?
Ako všetci vieme, môžeme deklarovať ukazovateľ funkcie a ukázať ho na funkciu v C:
void func1 (neplatné);
void (*pFunc) (void) = func1;
a pomocou neho zavolajte funkciu, na ktorú ukázal
pFunc ();
Existujú však rozdiely v C ++, ak sa pokúsite skompilovať kód nižšie:
trieda A {
public: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
kompilátor nahlási chybu prevodu typu, tu je správny príklad:
void (A::*pFunc) (void) = & A:: func1;
Keď sa ho pokúsime použiť na zavolanie tejto metódy, chyba znova. Dôvodom tejto chyby je, že objektovú metódu musí vyvolať objekt. Vytvoríme teda objekt, ktorý ho bude volať:
A a;
a.*pFunc ();
Tentoraz žiadny problém. V Delegate.h je teda trieda delegátov.
predloha
middleware triedy:: Delegát: verejný middleware:: rozhranie:: IDelegát {public: Delegát (objekt T *, prázdny (metóda T:: *) (prázdny *)); void invoke (void * args); chránené: T * _object; void (metóda T:: *_) (void *); }; vložený middleware šablóny:: Delegát:: Delegát (objekt T *, prázdny (metóda T:: *) (prázdny *)): _object (objekt), _metóda (metóda) {} šablóna vložený prázdny middleware:: Delegát:: vyvolať (neplatné * args) {(_object-> * _ metóda) (args); }
Pretože trieda delegáta je trieda šablón, čo znamená, že delegát je rozdiel voči delegátovi, ako ich označiť ukazovateľom rovnakého typu? Odpoveď je rozhranie, takže v IDelegate.h je rozhranie IDelegate.
middleware triedy:: rozhranie:: IDelegate {
public: virtual void invoke (void * args) = 0; };
V triede PIR Senzor a Senzor hlasitosti existuje premenná s názvom _delegates, ktorá sa používa na ukladanie ukazovateľa delegátov, a existuje metóda s názvom invokeAllDelegates (), ktorá sa používa na vyvolanie všetkých delegátov v skupine _delegates, a bude sa volať v meracej () metóde.
POZNÁMKA: Delegované metódy, ako napríklad changeAnimation (), changeSpeed () a changeColor (), sa budú volať v prerušení timer2, preto v nich NEPOUŽÍVAJTE delay () ani inú funkciu založenú na prerušení.
Odporúča:
Slnečné svetlo bez batérie alebo slnečné denné svetlo Prečo nie?: 3 kroky
Slnečné svetlo bez batérie alebo slnečné denné svetlo … Prečo nie?: Vitajte. Prepáčte za moju angličtinu Daylight? Slnečné? Prečo? Cez deň mám mierne tmavú miestnosť a pri použití musím zapnúť svetlo. Nainštalujte slnečné svetlo na deň a noc (1 miestnosť): (v Čile)-solárny panel 20w: 42 dolárov-batéria: 15 dolárov-solárne poplatok za
Reaktívne svetlo hudby srdca: 7 krokov
Reaktívne svetlo Heart Music: Ahoj, priateľ, dnes urobím obvod reaktívneho svetla Heart Music, v ktorom keď bude hrať hudba okolo tohto obvodu, budú LED diódy svietiť ako hudba. Začnime
Generátor hudby podľa počasia (midi generátor založený na ESP8266): 4 kroky (s obrázkami)
Generátor hudby podľa počasia (Midi generátor založený na ESP8266): Ahoj, dnes vám vysvetlím, ako si vytvoriť vlastný malý generátor hudby podľa počasia. Je založený na ESP8266, ktorý je niečo ako Arduino a reaguje na teplotu, dážď a intenzita svetla. Nečakajte, že z neho budú celé skladby alebo akordové programy
Lifi (odosielanie analógového signálu hudby prostredníctvom LED): 4 kroky
Lifi (posielať analógový signál hudby cez LED): UPOZORNENIE !!!-*** Ospravedlňujeme sa, ak je to úplne nečitateľné, je to môj prvý nevyspytateľný, buďte láskaví, lol *** _ Úvod: Za posledných niekoľko rokov došlo k rýchlemu nárastu využitie RF oblasti elektromagnetického spektra. Je to kvôli
Arduino vianočné zdravie!: 5 krokov (s obrázkami)
Arduino vianočné pozdravy!: Vychutnajte si sezónu, aby sa Arduino nalepilo na slávnostné miesta a aké lepšie miesto ako vianočný stromček! V tomto projekte budeme vyrábať vianočný stromček, ktorý môže spievať veľa rôznych vianočných piesní a rozsvietiť ho v spojení s