Πίνακας περιεχομένων:

Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 βήματα (με εικόνες)
Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 βήματα (με εικόνες)

Βίντεο: Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 βήματα (με εικόνες)

Βίντεο: Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 βήματα (με εικόνες)
Βίντεο: Arduino & Neopixel Coke Bottle Party Light 2024, Ιούλιος
Anonim
Image
Image

Έτσι, ο γιος μου Doon εντοπίζει ένα πολύ δροσερό φως πάρτι φτιαγμένο από παλιά μπουκάλια οπτάνθρακα και τα χνουδωτά εσωτερικά του Glow Sticks και μας ρωτά αν μπορούμε να φτιάξουμε ένα για τις επερχόμενες σχολικές του εξετάσεις είναι πάνω από το χτύπημα PartAYYY !!! Λέω σίγουρα, αλλά δεν θα προτιμούσατε να έχετε μερικά από αυτά τα πικάντικα δαχτυλίδια Adafruit Neopixel για τα οποία διαβάζαμε … Μου δίνει ένα κενό βλέμμα. Επειδή είναι αλήθεια ότι δεν ξέρει για τι μιλάω, αλλά ο μπαμπάς βρήκε την ευκαιρία να παίξει με εκείνα τα δαχτυλίδια Neopixel που διάβαζε και όλοι γνωρίζουμε έναν από τους 10 κορυφαίους λόγους που γεννούν οι μπαμπάδες geek είναι να έχουν δικαιολογία για να παίξουν με δροσερά gadget που λένε σε όλους ότι είναι για τα παιδιά τους.

Αυτό είναι ένα εξαιρετικά απλό έργο που φαίνεται πραγματικά υπέροχο. Κατασκευάσαμε τα δικά μας από 3 παλιά μπουκάλια οπτάνθρακα, μια ξύλινη πιατέλα και μια βάση στήριξης παιδικής χαράς - πράγματα που βρίσκονται στο υπόγειο - σε συνδυασμό με ένα Arduino (Leonardo στην περίπτωσή μας, αλλά οποιοσδήποτε πίνακας Genuino θα κάνει!) Και τρία δαχτυλίδια Neopixel Το Παρήγγειλα ένα δαχτυλίδι 9-LED, αλλά κατέληξα με ένα δαχτυλίδι 12-LED στην ίδια τιμή. Το οποίο ήταν γλυκό, αλλά σήμαινε ένα do-over στις τρύπες-οι δακτύλιοι 12-LED έχουν πλάτος 35mm, σε αντίθεση με 23mm. Τι θα χρειαστείτε:

  • Genuino/Arduino board (Χρησιμοποιήσαμε Leonardo, αλλά σχεδόν οποιοσδήποτε πίνακας θα το κάνει)
  • 3 δαχτυλίδια Neopixel (12 LED το καθένα): πάρτε τα από το Adafruit και υποστηρίξτε αυτούς τους καλούς ανθρώπους
  • Πυκνωτής 1000 μf 6,3v ή καλύτερος
  • Αντίσταση 300-500 ohm
  • Ένα ξύλινο πιάτο, ένα τετράγωνο ξύλο ξύλου, ή οτιδήποτε μπορείτε να βάλετε τα νεοπίξελ και να κάτσετε τα μπουκάλια κοκ από πάνω
  • Κάποια μορφή στήριξης για το πιάτο - μια βάση στήριξης παιδικής χαράς λειτούργησε υπέροχα για εμάς
  • Κονδυλωμάτων τοίχου 9v
  • 40mm τρύπα-τρύπα
  • Βίδες, παξιμάδια, ροδέλες, αποστάτες
  • Στερεό σύρμα πυρήνα
  • Συγκολλητικό σίδερο και συγκόλληση
  • Breadboard
  • Πλαστική θήκη για το Arduino. Μπορείτε να βγείτε έξω και να αγοράσετε μια πραγματικά ωραία πλαστική θήκη, κατασκευασμένη από πετρέλαιο εκατομμυρίων ετών, που έχει τρυπηθεί από το έδαφος σε κάποιο εύθραυστο περιβάλλον και κατασκευάζεται στην άλλη άκρη του πλανήτη και αποστέλλεται σε ένα δοχείο σε μια αποθήκη κοντά σας με όλα τα λιμάνια κομμένα σε τέλεια ευθυγράμμιση και σας το παραδίδουν στην πόρτα σας με ένα βαν που εκτοξεύει διοξείδιο του άνθρακα στην ατμόσφαιρα. Or μπορείτε να κάνετε αυτό που έκανα και να χρησιμοποιήσετε ένα παλιό απορριμμένο πλαστικό κουτί.. σε αυτή την περίπτωση ένα κουτί με τη βοήθεια της μπάντας της Μαδαγασκάρης που βρίσκεται γύρω στο ντουλάπι με τα φάρμακα… και ανοίξτε μερικές τρύπες σε αυτό. Εδώ τελειώνει η διάλεξη. Ας φτιάξουμε…

Βήμα 1: Φτιάξτε τη βάση

Φτιάξτε τη Βάση
Φτιάξτε τη Βάση
Φτιάξτε τη Βάση
Φτιάξτε τη Βάση

Μπορείτε να αυτοσχεδιάσετε τη βάση σας από ό, τι σκουπίδια έχετε στο δικό σας υπόγειο, ή ακόμα και να χρησιμοποιήσετε ένα ξύλινο κουτί ή οτιδήποτε θα κρύψει τα ηλεκτρονικά σας.

Αρχικά ανοίξαμε τρεις τρύπες, ομοιόμορφα τοποθετημένες στην ξύλινη πλάκα, αρκετά μεγάλες για να κάθονται τα δαχτυλίδια Neopixel. Στην εικόνα οι τρύπες είναι φρεάτια που ανοίγονται με ένα τρυπάνι φτυάρι. Στο τέλος, λόγω του μεγαλύτερου μεγέθους των δακτυλίων 12-LED, έπρεπε να ανοίξουμε τρύπες με ένα τρυπάνι. Αυτό σήμαινε να περάσω μέχρι την πλάκα, και αντί να βάλω τα δαχτυλίδια όμορφα στα καλά κατασκευασμένα μικρά πηγάδια βάθους 2 χιλιοστών με κεντρική τρύπα για μια προσεγμένη καλωδίωση, κατέληξα να στερεώσω τους δακτυλίους με… αχ… Κολλητική ταινία στο κάτω μέρος της πλάκας. Μην κρίνετε. Ούτως ή άλλως δεν μπορείτε να δείτε το κάτω μέρος της πλάκας στο σχέδιό μου. Και είναι σκοτεινό όταν είναι ανοιχτό. Και εκτός αυτού - τι συμβαίνει με την κολλητική ταινία;

Χρειαζόμουν κενό μεταξύ της πλάκας και του βραχίονα για μια σανίδα ψωμιού στο κάτω μέρος της πλάκας και ένα εξάρτημα - τον πυκνωτή, και για τα καλώδια που θα έπρεπε να περάσουν από το σανίδι στο Arduino, το οποίο σχεδίαζα να βάλω μέσα στο στήριγμα. Έτσι, έβαλα ένα σύνολο αυτοσχέδιων αποστάσεων στους άξονες των μπουλονιών για να δώσω αρκετό διάκενο - περίπου 3 εκατοστά, το ύψος του ψωμιού και λίγο για να μην συντρίψετε την καλωδίωση. Χρησιμοποίησα δύο ξύλινα μπουλόνια αγκύρωσης ανά γωνία επειδή είχαν το σωστό ύψος και βρίσκονταν στο συρτάρι … αυτό το κουτί με χαλαρές βίδες, μπουλόνια, καρφιά, σκουριασμένους κρίκους αλυσίδας, συνδέσμους σωλήνων, παλιά νομίσματα, απροσδόκητα αιχμηρά αντικείμενα και κάθε τρόπο κομμάτια και μπομπ που μπορούν μαγικά να σας εξοικονομήσουν ένα ταξίδι στο κατάστημα υλικού προσφέροντας, αν όχι το ακριβές πράγμα που χρειάζεστε, κάτι που θα κάνει μια χαρά.

Ευτυχές ατύχημα σχετικά με την θέση της παιδικής χαράς που βρήκα στο υπόγειο ήταν ότι είχε ήδη τρύπες μέσα από την πλάκα. Δεν χρειάζεται να τρυπήσετε σίδερο! Η βάση είχε τέσσερις οπές για μπουλόνια και ανοίξαμε τέσσερις αντι-βυθισμένες τρύπες στην ξύλινη πλάκα για να ταιριάζουν.

Στη συνέχεια βάψαμε όλο το σπρέι με το Gothic Black.

Βήμα 2: Προετοιμασία των δακτυλίων Neopixel

Προετοιμασία των δακτυλίων Neopixel
Προετοιμασία των δακτυλίων Neopixel

Θα χρειαστεί να συγκολλήσετε καλώδια στους δακτυλίους neopixel: ένα καλώδιο Data-In για όλα αυτά, ένα καλώδιο Data-Out για δύο από αυτά και τροφοδοσία και γείωση για καθένα. Όποιο μήκος νομίζετε ότι χρειάζεστε, προσθέστε λίγο. Μπορείτε πάντα να κόψετε το πλεονάζον σύρμα, δεν μπορείτε να τεντώσετε ένα πολύ κοντό. Και να γνωρίζετε την προειδοποίηση από το Adafruit:

Κατά τη συγκόλληση καλωδίων σε αυτούς τους δακτυλίους, πρέπει να είστε ιδιαίτερα προσεκτικοί σχετικά με τις κόκκους συγκόλλησης και τα βραχυκυκλώματα. Η απόσταση μεταξύ των εξαρτημάτων είναι πολύ σφιχτή! Συχνά είναι πιο εύκολο να τοποθετήσετε το καλώδιο από μπροστά και να κολλήσετε στο πίσω μέρος.

Μακάρι να το διαβάσω πριν κολλήσω στο μπροστινό μέρος. Κατάφερα να μην κάψω κανένα από τα LED μου, αλλά έκαψα την άκρη ενός με τρόπο που με έκανε να ιδρώνω μέχρι να το ενεργοποιήσω. Επίσης, αν είχα διαβάσει το εξαιρετικό εγχειρίδιο, θα είχα διαβάσει επίσης την προειδοποίηση να μην τοποθετήσω κλιπ αλιγάτορα στο LED. Αφήστε τα ναυάγια κοντά μου να είναι ο φάρος σας.

Το Neopixel δακτυλιώνει αλυσίδα μαργαρίτας, πράγμα που σημαίνει ότι μπορείτε να ελέγχετε όλα τα LED τους ταυτόχρονα από ένα Arduino συνδέοντας ένα καλώδιο από την έξοδο ενός δακτυλίου στο IN ενός άλλου. Κάθε δακτύλιος χρειάζεται επίσης καλώδια τροφοδοσίας και γείωσης.

Βήμα 3: Η καλωδίωση

Η καλωδίωση
Η καλωδίωση

Συνδέστε το όπως στο Fritzing παραπάνω-η καρφίτσα 6 του Arduino μεταφέρει τα δεδομένα στον πρώτο δακτύλιο, το Data-out από αυτόν τον δακτύλιο πηγαίνει στο Data-in του επόμενου, το Data-out από αυτό πηγαίνει στο Δεδομένα εισόδου του τελευταίου κουδουνίσματος. Δεν χρειάζεστε το καλώδιο εξόδου δεδομένων του τελικού δακτυλίου.

Η χωρητικότητα των 1000 µf περνάει μεταξύ των θετικών και αρνητικών ράγες του ψωμιού. Αυτό το καπάκι προστατεύει τα δαχτυλίδια από αιχμές ισχύος και συνιστάται από το τμήμα βέλτιστης πρακτικής του Adafruit NeoPixel Uberguide. Η αντίσταση στα δεδομένα στο πρώτο neopixel συνιστάται επίσης από την Adafruit-είναι 1K στο Fritzing, αλλά η συνιστώμενη αντίσταση είναι 300-500 ohms.

Στην κατασκευή μου, έτρεξα τα καλώδια από τα Neopixels στο πίσω μέρος της πλάκας σε μια σανίδα ψωμιού στερεωμένη στο κέντρο. Με αυτόν τον τρόπο δεν έχετε παρά να περάσετε τρία μακριά καλώδια στη μονάδα βάσης: ισχύ, γείωση και δεδομένα. Έκανα αυτά τα καλώδια πολύ μακριά-υπάρχει άφθονος αποθηκευτικός χώρος στη βάση και το καθιστά βολικό να μπορείς να τραβήξεις τον πίνακα για επαναπρογραμματισμό.

Βήμα 4: Ο κώδικας

"loading =" τεμπέλης "ανέφερε ο γιος μου ήθελε μια μουσική-αντιδραστική εκδοχή αυτού. Πήρε μέχρι τα 18α γενέθλιά του για να το καταφέρει, αλλά εδώ είναι!

Επιπλέον εξοπλισμός:

1 μονόπολος, διπλός διακόπτης ρίψης 1 αυτόματο μικρόφωνο ελέγχου κέρδους (χρησιμοποίησα τον MAX9184 του AdaFruit) 1 πυκνωτή 1uF-100uF (οποιαδήποτε τιμή)

Το μικρόφωνο πρέπει να έχει αυτόματο έλεγχο κέρδους για να λειτουργήσει σωστά. Η AGC θα δοκιμάζει συνεχώς τον θόρυβο του περιβάλλοντος και θα ανεβάζει και θα χαμηλώνει το κατώφλι που θεωρεί φόντο, οπότε το φως σας θα ανταποκρίνεται σε αιχμές σε αυτό το φόντο. Το μικρόφωνο του AdaFruit είναι λαμπρό: μπορείτε να μεταβείτε από ένα σιωπηλό δωμάτιο στο οποίο ο ήχος μιας μόνο φωνής θα το ενεργοποιήσει σε πλήρη λειτουργία πάρτι με ένα δωμάτιο γεμάτο εφήβους και μουσική να φωνάζει και θα αυξήσει τον ρυθμό της μουσικής πρόστιμο. Η εναλλακτική λύση, ένα ρυθμιζόμενο κέρδος μικροφώνου, έχει ένα μικροσκοπικό ποτενσιόμετρο στον πίνακα, το οποίο είναι απίστευτα λεπτό και ακατάστατο. Δεν χρειάζεται πολύ αλλαγή στον ήχο του περιβάλλοντος για να καταστήσετε τη μονάδα άχρηστη: τα φώτα ανάβουν συνεχώς ή σκοτεινιάζουν συνεχώς. Το AGC λειτουργεί σαν μαγικό.

Iθελα την επιλογή να χρησιμοποιήσω το μοτίβο δοκιμής στροβιλισμού ή τη μουσική, οπότε ένωσα το κεντρικό καλώδιο ενός διακόπτη σε VIN και το ένα καλώδιο στο pin 4 και το άλλο στο pin 8 του Leonardo. Δοκιμάζοντας αυτές τις ακίδες για HIGH ή LOW μπορούμε να γνωρίζουμε σε ποια κατάσταση βρίσκεται ο διακόπτης και αναλόγως τον κωδικό διακλάδωσης.

Βήμα 7: Καλωδίωση του μικροφώνου

Καλωδίωση του μικροφώνου
Καλωδίωση του μικροφώνου

Τροφοδοτήστε την είσοδο του Mic, μέσω αυτού του πυκνωτή 1-100μF, στο Analogue Pin 0. Εάν ο πυκνωτής σας είναι πολωμένος, ο πείρος εξόδου πηγαίνει στη θετική πλευρά (Πράσινο σύρμα).

Ευχαριστώ τον CodeGirlJP για τη ρουτίνα Trinket-Color-by-Sound, την οποία προσαρμόστηκα παρακάτω:

// Ενεργοποιημένα LED με ήχο με τα Arduino και NeoPixels

#περιλαμβάνω

#define MIC_PIN A0 // Το μικρόφωνο είναι προσαρτημένο στην καρφίτσα a0 στο Leonardo

#define LED_PIN 6 // NeoPixel LED σκέλος προσαρτημένο στην ακίδα 6 στο Leonardo #define N_PIXELS 36 // αριθμός εικονοστοιχείων σε κλώνο LED !!!!!! Προσαρμόστε τον αριθμό των εικονοστοιχείων στη ρύθμισή σας. Αυτό είναι σωστό για 3 δαχτυλίδια Neopixel !!!!!! #define N 100 // Αριθμός δειγμάτων που πρέπει να λαμβάνονται κάθε φορά που διαβάζονται Τα δείγματα ονομάζονται #define fadeDelay 5 // χρόνος καθυστέρησης για κάθε ποσότητα εξασθένισης #καθορισμός θορύβου Επίπεδο 30 // επίπεδο κλίσης του μέσου θορύβου μικροφώνου χωρίς ήχο

// Αρχικοποιήστε τη λωρίδα NeoPixel με τις παραπάνω καθορισμένες τιμές:

Λωρίδα Adafruit_NeoPixel = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

int δείγματα [N]; // αποθήκευση για ένα σύνολο συλλογής δειγμάτων

int periodFactor = 0; // παρακολουθείτε τον αριθμό των ms για τον υπολογισμό της περιόδου int t1 = -1; // ανιχνεύθηκαν χρόνοι κλίσης> 100. int T; // διάστημα μεταξύ χρόνων κλιμακωμένο σε χιλιοστά του δευτερολέπτου σε κλίση. // η κλίση δύο συλλεχθέντων δειγμάτων δειγμάτων δεδομένων byte periodChanged = 0; const int SwitchPinMusic = 4; // Καρφίτσωμα για τη θέση διακόπτη μουσικής ευαισθησίας const int SwitchPinSwirl = 8; // Καρφίτσα για θέση διακόπτη Δοκιμή μοτίβου (στροβιλισμός) int MusicbuttonState = 0; // Μεταβλητή εκτός λογικής για ευαισθησία μουσικής

// Μέθοδος εγκατάστασης Arduino

void setup () {

strip.begin ();

ledsOff (); καθυστέρηση (500)? displayColor (Τροχός (100)); strip.show (); καθυστέρηση (500)? oddWheel (Τροχός (100)); strip.show (); καθυστέρηση (500)? pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, Switched, FALLING);

}

// Μέθοδος βρόχου Arduino

void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // HIGH αν ο διακόπτης έχει οριστεί σε Μουσική ευαισθησία MusicbuttonState = digitalRead (SwitchPinMusic); // HIGH αν ο διακόπτης έχει οριστεί σε Test pattern while (SwirlbuttonState == LOW) {readSamples (); // Εκτελέστε τη ρουτίνα δειγματοληψίας μουσικής SwirlbuttonState = digitalRead (SwitchPinSwirl); // Ελέγξτε αν άλλαξε ο διακόπτης} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Χορός (); // Εκτελέστε τη ρουτίνα στρογγυλής δοκιμής μοτίβου SwirlbuttonState = digitalRead (SwitchPinSwirl); // Ελέγξτε αν άλλαξε ο διακόπτης

}

}

void Dance () {

while (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (λωρίδα. Χρώμα (0, 255, 0), 50); // Green SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (λωρίδα. Χρώμα (0, 0, 255), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe(strip. Color(0, 0, 0, 255), 50); // Λευκό RGBW // Αποστολή θεάτρου pixel chase στο… SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (λωρίδα. Χρώμα (127, 127, 127), 50); // White SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (λωρίδα. Χρώμα (127, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (λωρίδα. Χρώμα (0, 0, 127), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); ουράνιο τόξο (20)? SwirlbuttonState = digitalRead (SwitchPinSwirl); rainbowCycle (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Ανάγνωση και επεξεργασία δειγμάτων δεδομένων από Mic void readSamples () {for (int i = 0; i0) {slope = δείγματα - δείγματα [i -1]; } else {κλίση = δείγματα - δείγματα [N -1]; } // Ελέγξτε αν η κλίση είναι μεγαλύτερη από το noiseLevel - ανιχνεύεται ήχος που δεν είναι σε επίπεδο θορύβου εάν (abs (κλίση)> noiseLevel) {if (κλίση <0) {υπολογισμός Περίοδος (i); if (periodChanged == 1) {displayColor (getColor (T)); }}} else {ledsOff (); // TheaterChaseRainbow (50); } periodFactor += 1; καθυστέρηση (1)? }}

άκυρος υπολογισμός Περίοδος (int i)

{if (t1 == -1) {// t1 δεν έχει οριστεί t1 = i; } else {// t1 ορίστηκε έτσι calc period int period = periodFactor*(i - t1); periodChanged = T == period? 0: 1; Τ = περίοδος. //Serial.println(T); // επαναφορά t1 στη νέα τιμή i t1 = i; periodFactor = 0; }}

uint32_t getColor (int period)

{if (period == -1) return Wheel (0); αλλιώς εάν (περίοδος> 400) επιστροφή Τροχός (5)? αλλιώς επιστροφή τροχού (χάρτης (περίοδος -1*, -400, -1, 50, 255)). }

void fadeOut ()

{for (int i = 0; i <5; i ++) {strip.setBrightness (110 - i*20); strip.show (); // Ενημέρωση καθυστέρησης λωρίδας (fadeDelay); periodFactor += fadeDelay; }}

void fadeIn ()

{strip.setBrightness (100); strip.show (); // Ενημέρωση λωρίδας // ξεθώριασμα χρώματος για (int i = 0; i <5; i ++) {//strip.setBrightness(20*i+30); //strip.show (); // Ενημέρωση καθυστέρησης λωρίδας (fadeDelay); periodFactor+= fadeDelay; }}

void ledsOff ()

{fadeOut (); για (int i = 0; i

void displayColor (χρώμα uint32_t)

{για (int i = 0; i

void oddWheel (uint32_t χρώμα)

{για (int j = 0; j <256; j ++) {// κάντε κύκλο και στα 256 χρώματα στον τροχό για (int q = 0; q <3; q ++) {για (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, Τροχός ((i+j) % 255)); // ενεργοποιήστε κάθε τρίτο pixel στο} strip.show ();

καθυστέρηση (1)?

για (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // απενεργοποιήστε κάθε τρίτο pixel}}} fadeIn (); }

// Γεμίστε τις τελείες η μία μετά την άλλη με ένα χρώμα

void colorWipe (uint32_t c, uint8_t αναμονή) {για (uint16_t i = 0; i

void rainbow (uint8_t αναμονή) {

uint16_t i, j;

για (j = 0; j <256; j ++) {για (i = 0; i

// Ελαφρώς διαφορετικό, αυτό κάνει το ουράνιο τόξο να κατανέμεται εξίσου σε ολόκληρο

void rainbowCycle (uint8_t αναμονή) {uint16_t i, j;

για (j = 0; j <256*5; j ++) {// 5 κύκλοι όλων των χρωμάτων στον τροχό για (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); καθυστέρηση (αναμονή)? }}

// Ανιχνευτικά φώτα σε στιλ θεάτρου.

void theaterChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// κάντε 10 κύκλους κυνηγίας για (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // ενεργοποιήστε κάθε τρίτο pixel στο} strip.show ();

καθυστέρηση (αναμονή)?

για (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // απενεργοποιήστε κάθε τρίτο pixel}}}}

// Ανιχνευτικά φώτα σε στιλ θεάτρου με εφέ ουράνιου τόξου

void theaterChaseRainbow (uint8_t αναμονή) {για (int j = 0; j <256; j ++) {// κυκλώστε και τα 256 χρώματα στον τροχό για (int q = 0; q <3; q ++) {για (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Τροχός ((i+j) % 255)); // ενεργοποιήστε κάθε τρίτο pixel στο} strip.show ();

καθυστέρηση (αναμονή)?

για (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // απενεργοποιήστε κάθε τρίτο pixel}}}}

// Εισαγάγετε μια τιμή 0 έως 255 για να λάβετε μια τιμή χρώματος.

// Τα χρώματα είναι μια μετάβαση r - g - b - πίσω στο r. uint32_t Τροχός (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {strip return. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; λωρίδα επιστροφής. Χρώμα (0, WheelPos * 3, 255 - WheelPos * 3). } WheelPos -= 170; λωρίδα επιστροφής. Χρώμα (WheelPos * 3, 255 - WheelPos * 3, 0). }

void Switched () {

strip.show (); readSamples (); }

Πριν σφαχτώ στα σχόλια (θυμηθείτε την πολιτική Be Nice !!) Κατάλαβα αφού το ανέβασα αυτό πόσο ατημέλητος είναι μερικός από τον κώδικά μου. Δεν χρειάζεται να δοκιμάζετε συνεχώς τόσο το Pin 4 όσο και το Pin 8 για HIGH. Καθώς ο διακόπτης είναι μονόπολος διπλής ρίψης, η τιμή του ενός μπορεί να συναχθεί από το άλλο: χρειάζεται μόνο να δοκιμάσετε το ένα. Θα μπορούσατε, λοιπόν, να αφαιρέσετε κάθε αναφορά στην ανάγνωση και τη γραφή του MusicButtonState και απλώς να εκτελέσετε ολόκληρο το έργο πιο αποτελεσματικά δοκιμάζοντας το SwirlButtonState, εάν έχετε χαμηλή μνήμη ή επεκτείνεστε με άλλες ρουτίνες. Αλλά ο παραπάνω κώδικας λειτουργεί.

Και αν κάποιος θέλει να τροποποιήσει αυτές τις ρουτίνες ήχου για να ανιχνεύσει όχι μόνο τα επίπεδα θορύβου αλλά και τη συχνότητα, και γράψει έναν ομαλό κώδικα για να γλιστρήσει πάνω και κάτω στο φάσμα φωτός ως απάντηση στις κινήσεις κατά μήκος του φάσματος ήχου, αφήστε έναν σύνδεσμο στα σχόλια πώς το έκανες

Απολαμβάνω!

Συνιστάται: