Innehållsförteckning:
- Steg 1: Saker som används i detta projekt
- Steg 2: Maskinvaruanslutning
- Steg 3: Programvaruprogrammering
- Steg 4: Drift
Video: Christmas Music Cheer Light: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
God Jul! Vill du ha en julgran som kan interagera med dig?
Steg 1: Saker som används i detta projekt
Hårdvarukomponenter
- Seeeduino V4.2
- Bassköld V2
- Grove - Justerbar PIR -rörelsesensor
- Grove - Loudness Sensor
- Grove - WS2813 RGB LED Strip Vattentät - 60 LED/m - 1m
Programvaruappar och onlinetjänster
Arduino IDE
Steg 2: Maskinvaruanslutning
Anslut PIR -sensor, Loudness -sensor och LED -remsa till Base Shields port D2, A0 och D6 separat. Anslut basskyddet till Seeduino, allt klart.
Steg 3: Programvaruprogrammering
Biblioteken som följer ned måste installeras innan du programmerar, ladda ner och importera dem till din Arduino IDE manuellt:
- Led_Strip
- MsTimer2
- Arduino_Vector
För att göra koden mer kortfattad har vi förpackat den. CheerLight -klassen är applikationsklassen för detta projekt.
klassapplikation:: 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); skyddad: förare:: 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 designades av Singleton Patterns, vilket innebär att det bara finns en instans för den, du kan ringa CheerLight:: getInstance () till den instansen. Om dina sensorers anslutning skiljer sig från maskinvaruanslutning kan du ändra dem genom att ange setPIRSensorPin () och setLoudnessSensorPin () -metoder.
Vi rekommenderar att anropa MeasureSensors () -metod vid timeravbrott för att göra sensorer uppmätta i tid, men det är inte nödvändigt att ringa changeAnimation (), changeSpeed () eller changeColor () -metoder manuellt. De kommer att kallas via delegater när sensorer mäts.
Vad är en delegat?
Som vi alla vet kan vi deklarera en funktionspekare och få den att peka på en funktion i C:
void func1 (void);
void (*pFunc) (void) = func1;
och använd den för att kalla funktionen den pekade på
pFunc ();
Men det finns skillnader i C ++ om du försöker kompilera koden nedan:
klass A {
public: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
kompilatorn kommer att rapportera ett typkonverteringsfel, här är det rätta exemplet:
void (A::*pFunc) (void) = & A:: func1;
När vi försöker använda den för att kalla den metoden, fel igen. Orsaken till det felet är att en objektmetod måste anropas av ett objekt. Så vi skapar ett objekt för att kalla det:
A a;
a.*pFunc ();
Den här gången inga problem. Så det finns delegatklass i Delegate.h.
mall
klass mellanvara:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void påkalla (void * args); skyddad: T * _object; void (T:: *_ metod) (void *); }; mall 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); }
Eftersom delegatklassen är en mallklass, vilket innebär att delegat är skillnad mot delegat, hur kan man få dem att peka med pekaren av samma typ? Svaret är gränssnitt, så det finns IDelegate -gränssnitt i IDelegate.h.
klass mellanvara:: gränssnitt:: IDelegate {
public: virtual void invoke (void * args) = 0; };
I klassen PIR Sensor och Loudness Sensor har det en variabel med namnet _delegates som används för att lagra pekare på delegater, och det finns en metod som heter invokeAllDelegates () som används för att påkalla alla delegater i _delegates, den kommer att kallas i mått () -metod.
OBS! Delegerade metoder, såsom changeAnimation (), changeSpeed () och changeColor () kommer att kallas in timer2 interrupt, så använd INTE delay () eller annan avbrottsbaserad funktion i den.
Rekommenderad:
Breathing Christmas Tree - Arduino Christmas Light Controller: 4 steg
Breathing Christmas Tree-Arduino Christmas Light Controller: Det är inte goda nyheter att kontrollboxen för mitt 9 fot långa upplysta konstgjorda julgran gick sönder före jul , och tillverkaren tillhandahåller inga reservdelar. Detta obegripliga visar hur du gör din egen LED -ljusdrivrutin och styrenhet med Ar
Hall Effect Sensor: Christmas Music Box: 4 steg
Hall Effect Sensor: Christmas Music Box: Detta är en musiklåda som spelar musik när den öppnats (se videon!). Det är ett fantastiskt, speciellt och unikt sätt att slå in dina presenter till din speciella person! Den använder en hall -effektsensor för att kontrollera om locket har öppnats av bristen på magnetfält och
Arduino Christmas Cheer !: 5 steg (med bilder)
Arduino Christmas Cheer !: Tiss säsongen att hålla Arduino på festliga platser, och vad passar bättre än en julgran! I det här projektet kommer vi att göra en julgran som kan sjunga en massa olika julsånger och lysa upp tillsammans med musen
Använd kraften för att sprida Holiday Cheer !: 5 steg
Använd kraften för att sprida semesterjubel !: Denna instruktion visar dig hur du bygger ett stationärt julgran av kontorsmaterial, lägger till en mikrokontroller och individuellt adresserbara lysdioder och använder sedan Sphero Force Band (släppt med andra generationens Sphero BB -8 droid) till tur
$ 20 Holiday Cheer Box: 5 steg (med bilder)
$ 20 Holiday Cheer Box: Detta projekt visar hur du bygger en låda som spelar ett slumpmässigt ljud när knappen trycks in. I det här fallet använde jag den för att bygga en låda som jag strategiskt kan placera runt kontoret under semestern. När folk trycker på knappen hör de ett