Indholdsfortegnelse:
- Trin 1: Ting, der bruges i dette projekt
- Trin 2: Hardwareforbindelse
- Trin 3: Software programmering
- Trin 4: Betjening
Video: Christmas Music Cheer Light: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Glædelig jul! Vil du have et juletræ, der kan interagere med dig?
Trin 1: Ting, der bruges i dette projekt
Hardware komponenter
- Seeeduino V4.2
- Base Shield V2
- Grove - Justerbar PIR -bevægelsessensor
- Grove - Loudness Sensor
- Grove - WS2813 RGB LED Strip Vandtæt - 60 LED/m - 1m
Software -apps og onlinetjenester
Arduino IDE
Trin 2: Hardwareforbindelse
Tilslut PIR -sensor, lydstyrkesensor og LED -strimmel separat til Base Shields port D2, A0 og D6. Sæt Base Shield til Seeduino, alt færdigt.
Trin 3: Software programmering
Bibliotekerne, der følger ned, skal installeres før programmering. Download og importer dem manuelt til din Arduino IDE:
- Led_Strip
- MsTimer2
- Arduino_Vektor
For at gøre koden mere kortfattet, har vi pakket den. CheerLight -klassen er applikationsklassen for dette projekt.
klasse applikation:: CheerLight
: public application:: interface:: IApplication {public: void setup (void); void loop (void); void setPIRSensorPin (uint8_t pin); void setLoudnessSensorPin (uint8_t pin); void measureSensors (void); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); statisk applikation:: CheerLight * getInstance (void); beskyttet: driver:: LEDStrip _ledStrip; driver:: PIRSensor _pirSensor; driver:: LoudnessSensor _loudnessSensor; uint8_t _animation; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (tomrum); statisk applikation:: CheerLight _instance; };
CheerLight -klassen blev designet af Singleton Patterns, hvilket betyder, at der kun er én forekomst til den, du kan kalde CheerLight:: getInstance () til den forekomst. Hvis dine sensorers forbindelse er forskellig fra hardware -forbindelse, kan du ændre dem ved at kalde setPIRSensorPin () og setLoudnessSensorPin () -metoder.
Vi anbefaler, at man kalder MeasureSensors () -metoden i timerafbrydelse for at få sensorer målt rettidigt, men manuelt er det ikke nødvendigt at kalde changeAnimation (), ChangeSpeed () eller ChangeColor () -metoder. De vil blive kaldt via delegerede, når sensorer måles.
Hvad er en delegeret?
Som vi alle ved, kan vi erklære en funktionsmarkør og få den til at pege på en funktion i C:
void func1 (void);
void (*pFunc) (void) = func1;
og brug den til at kalde den funktion, den pegede på
pFunc ();
Men der er forskelle i C ++, hvis du prøver at kompilere koden nedenfor:
klasse A {
public: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
kompilatoren rapporterer en typekonverteringsfejl, her er det rigtige eksempel:
void (A::*pFunc) (void) = & A:: func1;
Når vi prøver at bruge den til at kalde den metode, fejl igen. Grunden til denne fejl er, at en objekt-metode skal kaldes af et objekt. Så vi opretter et objekt for at kalde det:
A a;
a.*pFunc ();
Denne gang ikke noget problem. Så der er delegeret klasse i Delegate.h.
skabelon
class middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void påkalde (void * args); beskyttet: T * _objekt; void (T:: *_ metode) (void *); }; template inline middleware:: Delegate:: Delegate (T *object, void (T:: *method) (void *)): _object (object), _method (method) {} template inline void middleware:: Delegate:: invoke (void * args) {(_object-> * _ method) (args); }
Fordi delegeret klasse er en skabelonklasse, hvilket betyder, at delegeret er forskel på delegeret, hvordan har de samme type til at få dem til at pege med markøren? Svaret er interface, så der er IDelegate interface i IDelegate.h.
klasse mellemware:: grænseflade:: IDelegate {
public: virtual void invoke (void * args) = 0; };
I klassen PIR Sensor og Loudness Sensor har der en variabel, der hedder _delegater, der bruges til at gemme markøren af delegerede, og der har en metode ved navn invokeAllDelegates (), der bruges til at påberåbe alle delegerede i _delegater, den vil blive kaldt i mål () metode.
BEMÆRK: Delegerede metoder, såsom changeAnimation (), changeSpeed () og changeColor () vil blive kaldt i timer2 interrupt, så brug IKKE delay () eller anden interrupt-baseret funktion i den.
Anbefalede:
Simple Light-Up Ugly Christmas Sweater: 9 trin (med billeder)
Simple Light-Up Ugly Christmas Sweater: Det sker hvert år … Du har brug for en " grim ferietrøje " og du glemte at planlægge fremad. I år har du held og lykke! Din udsættelse vil ikke være din undergang. Vi viser dig, hvordan du laver en simpel Light-Up Ugly julesweater i
Breathing Christmas Tree - Arduino Christmas Light Controller: 4 trin
Breathing Christmas Tree-Arduino Christmas Light Controller: Det er ikke en god nyhed, at kontrolboksen til mit 9 ft lange oplyste kunstige juletræ gik i stykker før jul , og producenten leverer ikke reservedele. Denne uigennemskuelige viser, hvordan du får din egen LED -lysdriver og controller til at bruge Ar
Hall Effect Sensor: Christmas Music Box: 4 trin
Hall Effect Sensor: Christmas Music Box: Dette er en musikboks, der afspiller musik, når den er åbnet (se videoen!). Det er en fantastisk, speciel og unik måde at pakke dine gaver ind til din specielle person! Den bruger en hall -effektsensor til at kontrollere, om låget er blevet åbnet af mangel på magnetfelt og
Arduino Christmas Cheer !: 5 trin (med billeder)
Arduino Christmas Cheer !: Tiss sæsonen til at holde Arduino's på festlige steder, og hvad er bedre sted end et juletræ! I dette projekt skal vi lave et juletræ, der kan synge en masse forskellige julesange og lyse op sammen med musen
$ 20 Holiday Cheer Box: 5 trin (med billeder)
$ 20 Holiday Cheer Box: Dette projekt viser dig, hvordan du bygger en kasse, der afspiller en tilfældig lyd, når der trykkes på knappen. I dette tilfælde brugte jeg den til at bygge en kasse, som jeg strategisk kan placere rundt på kontoret i løbet af ferien. Når folk trykker på knappen, hører de en