Obsah:
- Krok 1: Věci použité v tomto projektu
- Krok 2: Hardwarové připojení
- Krok 3: Programování softwaru
- Krok 4: Provoz
Video: Vánoční hudba Cheer Light: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
Veselé Vánoce! Chcete mít vánoční stromeček, který s vámi může komunikovat?
Krok 1: Věci použité v tomto projektu
Hardwarové komponenty
- Seeeduino V4.2
- Základní štít V2
- Grove - nastavitelný snímač pohybu PIR
- Grove - Senzor hlasitosti
- Grove - WS2813 RGB LED pásek vodotěsný - 60 LED/m - 1m
Softwarové aplikace a online služby
Arduino IDE
Krok 2: Hardwarové připojení
Připojte samostatně PIR senzor, senzor hlasitosti a LED pásek k portu D2, A0 a D6 základního štítu. Připojte základní štít k Seeduino, vše hotovo.
Krok 3: Programování softwaru
Následující knihovny je třeba nainstalovat před programováním, stáhněte si je a importujte do svého Arduino IDE ručně:
- Led_Strip
- MsTimer2
- Arduino_Vector
Aby byl kód stručnější, zabalili jsme ho. Třída CheerLight je aplikační třídou tohoto projektu.
třída aplikace:: CheerLight
: veřejná aplikace:: rozhraní:: IApplication {public: void setup (void); prázdná smyčka (prázdná); zrušit setPIRSensorPin (pin uint8_t); void setLoudnessSensorPin (pin uint8_t); neplatné opatření Senzory (neplatné); void changeAnimation (neplatné * args); void changeSpeed (neplatné * args); void changeColor (neplatné * args); statická aplikace:: CheerLight * getInstance (neplatné); chráněno: driver:: LEDStrip _ledStrip; ovladač:: PIRSensor _pirSensor; ovladač:: LoudnessSensor _loudnessSensor; uint8_t _animation; middleware:: Delegát _detectedDelegate; middleware:: Delegát _absoluteLoudnessDelegate; middleware:: Delegát _relativeLoudnessDelegate; CheerLight (neplatné); statická aplikace:: CheerLight _instance; };
Třídu CheerLight navrhla společnost Singleton Patterns, což znamená, že pro ni existuje pouze jedna instance, na kterou můžete zavolat CheerLight:: getInstance (). Pokud se připojení vašich senzorů liší od hardwarového připojení, můžete je změnit voláním metod setPIRSensorPin () a setLoudnessSensorPin ().
Doporučujeme volat metodu MeasSensors () v přerušení časovače, aby byly senzory měřeny včas, ale ruční volání metod changeAnimation (), changeSpeed () nebo changeColor () není nutné. Budou voláni prostřednictvím delegátů při měření senzorů.
Co je to delegát?
Jak všichni víme, můžeme deklarovat ukazatel funkce a ukázat jej na funkci v C:
void func1 (neplatné);
void (*pFunc) (void) = func1;
a použijte jej k volání funkce, na kterou ukázal
pFunc ();
Existují však rozdíly v C ++, pokud se pokusíte zkompilovat kód níže:
třída A {
public: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
kompilátor nahlásí chybu převodu typu, zde je správný příklad:
void (A::*pFunc) (void) = & A:: func1;
Když se ho pokusíme použít k volání této metody, chyba znovu. Důvodem této chyby je, že objektovou metodu musí volat objekt. Vytvoříme tedy objekt, kterému budeme říkat:
A a;
a.*pFunc ();
Tentokrát žádný problém. V Delegate.h je tedy třída Delegate.
šablona
middleware třídy:: Delegát: veřejný middleware:: rozhraní:: IDelegát {public: Delegát (objekt T *, void (metoda T:: *) (void *)); void invoke (void * args); chráněno: T * _object; void (metoda T:: *_) (void *); }; vložený middleware šablony:: Delegát:: Delegát (objekt T *, neplatný (metoda T:: *) (prázdný *)): _objekt (objekt), _metoda (metoda) {} šablona vložený prázdný middleware:: Delegát:: vyvolat (neplatné * args) {(_object-> * _ metoda) (args); }
Protože třída Delegate je třída šablony, což znamená, že Delegate je rozdíl vůči Delegate, jak je přimět, aby ukazovaly ukazatelem stejného typu? Odpověď je rozhraní, takže v IDelegate.h existuje rozhraní IDelegate.
middleware třídy:: rozhraní:: IDelegate {
public: virtuální void invoke (void * args) = 0; };
Ve třídě PIR Sensor a Loudness Sensor's existuje proměnná s názvem _delegates, která slouží k ukládání ukazatele Delegates, a existuje metoda s názvem invokeAllDelegates (), která slouží k vyvolání všech delegátů v _delegates, bude volána metodou Meas ().
POZNÁMKA: Delegované metody, jako například changeAnimation (), changeSpeed () a changeColor (), budou volány v přerušení timer2, takže v nich NEPOUŽÍVEJTE delay () ani jinou funkci založenou na přerušení.
Doporučuje:
Vánoční vánoční světelná show RGB Část 2: Xlights: 7 kroků
Vánoční vánoční světelná show RGB Část 2: Xlights: V této instruktáži vám ukážu, jak sekvencovat svou první skladbu. Pokud jste neviděli část 1, doporučuji si to prohlédnout zde. Když nyní stavíte a programujete vánoční světelnou show, 75% času budete ve svém sekvenceru
Hudba s Arduino a relé: 6 kroků
Hudba s Arduino a relé: v tomto tutoriálu vám ukážu, jak vytvářet hudbu pomocí relé a zajímavého projektu pro začátečníky Arduino
Hudba Arduino LED: 6 kroků
Arduino LED Music: Toto je můj projekt Arduino. Jedná se o měřič VU, kde se LED diody rozsvítí na melodii, přesněji řečeno na hlasitost hudby. Skládá se z desky detektoru zvuku a 10 různých barevných LED diod, které zobrazují měřič. Také inzeruji
Hudba Mii: 4 kroky
Mii Music: Tento Instructable byl napsán, aby pomohl těm, kteří se učí poprvé kódovat pomocí Sonic Pi. Téma Mii Channel je skvělým začátečnickým dílem, protože uživatel si může procvičit kódování pomocí vědecké notové osnovy a pohodlně se
REAKTIVNÍ HUDBA ARDUINO LED LIGHT: 4 kroky
ARDUINO LED LIGHT MUSIC REACTIVE: Dobrý den, pokud máte rádi LED světla s hudbou, je to pro vás skvělý návod. Velmi snadné