Πίνακας περιεχομένων:
- Βήμα 1: Πράγματα που χρησιμοποιούνται σε αυτό το έργο
- Βήμα 2: Σύνδεση υλικού
- Βήμα 3: Προγραμματισμός λογισμικού
- Βήμα 4: Λειτουργία
Βίντεο: Χριστουγεννιάτικη μουσική Cheer Light: 4 Βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Καλά Χριστούγεννα! Θέλετε να έχετε ένα χριστουγεννιάτικο δέντρο που να μπορεί να αλληλεπιδράσει μαζί σας;
Βήμα 1: Πράγματα που χρησιμοποιούνται σε αυτό το έργο
Συστατικά υλικού
- Seeeduino V4.2
- Base Shield V2
- Grove - Ρυθμιζόμενος αισθητήρας κίνησης PIR
- Grove - Loudness Sensor
- Grove - WS2813 RGB LED Strip Waterproof - 60 LED/m - 1m
Εφαρμογές λογισμικού και διαδικτυακές υπηρεσίες
Arduino IDE
Βήμα 2: Σύνδεση υλικού
Συνδέστε τον αισθητήρα PIR, τον αισθητήρα έντασης και τη λωρίδα LED στη θύρα D2, A0 και D6 της Base Shield ξεχωριστά. Συνδέστε το Base Shield στο Seeduino, όλα είναι έτοιμα.
Βήμα 3: Προγραμματισμός λογισμικού
Οι βιβλιοθήκες που ακολουθούν πρέπει να εγκατασταθούν πριν από τον προγραμματισμό. Κάντε λήψη και εισαγάγετε τις στο Arduino IDE με μη αυτόματο τρόπο:
- Led_Strip
- MsTimer2
- Arduino_Vector
Για να κάνουμε τον κώδικα πιο συνοπτικό, τον έχουμε συσκευάσει. Η κατηγορία CheerLight είναι η κατηγορία εφαρμογών αυτού του έργου.
εφαρμογή τάξης:: CheerLight
: public application:: interface:: IApplication {public: void setup (void); void loop (void)? void setPIRSensorPin (uint8_t pin); void setLoudnessSensorPin (uint8_t pin); μέτρηση κενού Αισθητήρες (κενό); void changeAnimation (void * args)? void changeSpeed (void * args)? void changeColor (void * args)? στατική εφαρμογή:: CheerLight * getInstance (άκυρο). προστατευμένο: οδηγός:: LEDStrip _ledStrip; πρόγραμμα οδήγησης:: PIRSensor _pirSensor; πρόγραμμα οδήγησης:: LoudnessSensor _loudnessSensor; uint8_t _animation; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (άκυρο) στατική εφαρμογή:: CheerLight _instance? };
Η τάξη CheerLight σχεδιάστηκε από τα Singleton Patterns, πράγμα που σημαίνει ότι υπάρχει μόνο ένα παράδειγμα για αυτό, μπορείτε να καλέσετε το CheerLight:: getInstance () σε αυτήν την περίπτωση. Εάν η σύνδεση των Αισθητήρων είναι διαφορετική από τη Σύνδεση υλικού, μπορείτε να τους αλλάξετε καλώντας μεθόδους setPIRSensorPin () και setLoudnessSensorPin ().
Συνιστούμε τη μέθοδο callSensors () σε διακοπή χρονοδιακόπτη για να μετρηθούν οι αισθητήρες εγκαίρως, αλλά οι μέθοδοι κλήσης changeAnimation (), changeSpeed () ή changeColor () δεν είναι απαραίτητες. Θα κληθούν μέσω εκπροσώπων όταν μετρηθούν οι αισθητήρες.
Τι είναι το Delegate;
Όπως όλοι γνωρίζουμε, μπορούμε να δηλώσουμε έναν δείκτη συνάρτησης και να τον κάνουμε να δείξει μια συνάρτηση στο C:
void func1 (void)?
void (*pFunc) (void) = func1;
και χρησιμοποιήστε το για να καλέσετε τη συνάρτηση που έδειξε
pFunc ();
Υπάρχουν όμως διαφορές στο C ++, αν προσπαθήσετε να συντάξετε τον παρακάτω κώδικα:
τάξη Α {
public: void func1 (void)? }; void (*pFunc) (void) = & A:: func1;
ο μεταγλωττιστής θα αναφέρει ένα σφάλμα μετατροπής τύπου, εδώ είναι το σωστό παράδειγμα:
void (A::*pFunc) (void) = & A:: func1;
Όταν προσπαθούμε να το χρησιμοποιήσουμε για να καλέσουμε αυτήν τη μέθοδο, κάνουμε ξανά σφάλμα. Ο λόγος για αυτό το σφάλμα είναι ότι μια μέθοδος αντικειμένου πρέπει να κληθεί από ένα αντικείμενο. Έτσι δημιουργούμε ένα αντικείμενο για να το ονομάσουμε:
Α α?
a.*pFunc ();
Αυτή τη φορά κανένα πρόβλημα. Υπάρχει λοιπόν τάξη Delegate στο Delegate.h.
πρότυπο
class middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (αντικείμενο T *, κενό (μέθοδος T:: *) (άκυρο *)); void invoke (void * args)? προστατευμένο: T * _object; κενό (μέθοδος T:: *_) (κενό *); }; πρότυπο 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); }
Επειδή η κλάση Delegate είναι μια κατηγορία προτύπου, που σημαίνει ότι ο Delegate είναι η διαφορά από τον Delegate, πώς να τις επισημάνω με δείκτη να έχουν τον ίδιο τύπο; Η απάντηση είναι διεπαφή, οπότε υπάρχει IDelegate interface στο IDelegate.h.
class middleware:: interface:: IDelegate {
public: virtual void invoke (void * args) = 0; };
Στην κλάση PIR Sensor και Loudness Sensor, υπάρχει μια μεταβλητή που ονομάζεται _ delegates που χρησιμοποιείται για την αποθήκευση του δείκτη των Delegates, και υπάρχει μια μέθοδος που ονομάζεται invokeAllDelegates () που χρησιμοποιείται για την κλήση όλων των Delegates στο _delegates, θα ονομάζεται μέτρο μέτρησης ().
ΣΗΜΕΙΩΣΗ: Εκχωρήστε μεθόδους, όπως changeAnimation (), changeSpeed () και changeColor () θα κληθούν στο timer2 interrupt, οπότε ΜΗΝ χρησιμοποιήσετε καθυστέρηση () ή άλλη λειτουργία που βασίζεται σε διακοπή σε αυτήν.
Συνιστάται:
Χριστουγεννιάτικη λωρίδα φωτός LED: 3 βήματα
LED Christmas Light Strip: wantedθελα να δημιουργήσω ένα διασκεδαστικό και εορταστικό έργο Arduino για τις γιορτές των Χριστουγέννων, έτσι αποφάσισα να δημιουργήσω τα δικά μου φώτα λωρίδας DIY. Αυτό το έργο απαιτεί μηχανή συγκόλλησης, οπότε λάβετε το υπόψη
Φοβερό Light Halloween Light Show με μουσική!: 5 βήματα
Φοβερό Halloween Light Show With Music!: Για αυτό το έργο, έφτιαξα μια φωτεινή οθόνη Halloween με μερικά ειδικά φώτα που ονομάζονται pixel RGB που συγχρονίζονται με 4 αποκριάτικα τραγούδια. Αν θέλετε να δείτε αυτές τις φωτεινές εκπομπές και τις μελλοντικές, πηγαίνετε εδώ. Αυτή η φωτεινή παράσταση μπορεί να είναι δύσκολο να χτιστεί
Χριστουγεννιάτικη κάρτα PCB: 3 βήματα (με εικόνες)
Χριστουγεννιάτικη κάρτα PCB: Με τα Χριστούγεννα στη γωνία σκεφτόμουν μια τακτοποιημένη ιδέα δώρου για τους συγγενείς και τους φίλους μου. Πρόσφατα παρήγγειλα μερικά pcb για ένα διαφορετικό έργο και σκέφτηκα ότι θα ήταν διασκεδαστικό να φτιάχνω χριστουγεννιάτικες κάρτες από pcb. Εκτός από το ότι είναι
Ξεκινήστε την Χριστουγεννιάτικη Έλασή σας με ένα Κουμπί: 5 Βήματα
Ξεκινήστε τη Χριστουγεννιάτικη φωτεινή σας εμφάνιση με ένα κουμπί: Όταν εκτελείτε μια χριστουγεννιάτικη φωτεινή εκπομπή συγχρονισμένη με τη μουσική, ίσως θελήσετε να ξεκινήσετε την παράσταση πατώντας ένα κουμπί. Αυτό το σεμινάριο ισχύει μόνο για μια παράσταση που ελέγχεται μέσω του Falcon Pi Player (FPP) που εκτελείται σε Raspberry Pi. Εάν τρέχετε F
Music Reactive Light -- Πώς να φτιάξετε εξαιρετικά απλή μουσική Reactive Light για να φτιάξετε το Desktop Awsome .: 5 βήματα (με εικόνες)
Music Reactive Light || Πώς να φτιάξετε εξαιρετικά απλή μουσική Reactive Light για να φτιάξετε την επιφάνεια εργασίας Awsome .: Γεια σας, παιδιά, σήμερα θα χτίσουμε ένα πολύ ενδιαφέρον έργο. Σήμερα θα φτιάξουμε μουσικό αντιδραστικό φως. Το led θα αλλάξει τη φωτεινότητά του σύμφωνα με το μπάσο που είναι στην πραγματικότητα ηχητικό σήμα χαμηλής συχνότητας. Είναι πολύ απλό στην κατασκευή. Θα