Stap 5: Code
Ik gebruikte een licht aangepaste versie van de code die ik in mijn tabel oneindigheid met casual tools project gebruikte. Ik zet het hier voor download en plug and play doeleinden, maar het is gemakkelijk te vinden van inspiratie (en alle vereiste bibliotheken) bij adafruit, of hier op de Instructables website. Mijn code is vrij basic en cycli van de verschillende displays van unieke kleuren, rainbow, draaiingen enz.
De volgende stap (als ik tijd heb) zullen toevoegen een kleine piezo of de microfoon en maken het display reageren op muziek als een fysieke equalizer animatie (waar notities zou veranderen de kleur en het volume de lichtintensiteit bijvoorbeeld).
Updates over dit ergens in de toekomst.
CODE:
#include
#define PINdroite 1 #define STRIPSIZE 12
Parameter 1 = aantal pixels in de strip / / Parameter 2 = pin-nummer (de meeste zijn geldig) / / Parameter 3 = pixel type vlaggen, wens samen voegen: / / NEO_KHZ800 800 KHz bitstream (de meeste NeoPixel producten w/WS2812 LEDs) / / NEO_KHZ400 400 KHz (klassieke 'v1' (niet v2) FLORA pixels, WS2811 drivers) / / NEO_GRB Pixels zijn Kabelgebonden voor GRB bitstream (de meeste NeoPixel produkten) / / NEO_RGB Pixels zijn Kabelgebonden voor RGB bitstream (v1 FLORA pixels niet v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel (STRIPSIZE, PINdroite, NEO_GRB + NEO_KHZ800);
void setup {strip.begin(); strip.setBrightness(60); / / verlagen van helderheid en opslaan van oogbollen! strip.show(); / / initialiseren van alle pixels op 'off'}
void loop {/ / sommige procedures van de in het volgende voorbeeld laat zien hoe om weer te geven op de pixels: colorWipe (strip. Color(0,0,0), 25); Zwarte colorWipe (strip. Color(64, 0, 0), 100); Rode colorWipe (strip. Color(0, 64, 0), 100); Groene colorWipe (strip. Color(0, 0, 64), 100); Blauwe colorWave(75); colorWipe (strip. Color(0,0,0), 100); Zwarte rainbow(15); colorWipe (strip. Color(0,0,0), 100); Zwarte rainbowCycle(15); colorWipe (strip. Color(0,0,0), 100); Zwarte colorWave(30); }
De puntjes een na de andere te vullen met een kleur void colorWipe (uint32_t c, uint8_t wachten) {voor (uint16_t i = 0; i
VOID regenboog (uint8_t wachten) {uint16_t i, j;
voor (j = 0; j < 256; j ++) {voor (ik = 0; i
Iets anders, dit maakt de regenboog even verspreid over void rainbowCycle (uint8_t wachten) {uint16_t i, j;
voor (j = 0; j < 256 * 5; j ++) {/ / 5 cycli van alle kleuren op wiel voor (ik = 0; ik < strip.numPixels(); i ++) {strip.setPixelColor (ik, wiel (((i * 256/strip.numPixels()) + j) & 255));} strip.show(); delay(wait);}}
Invoergegevens naar een waarde van 0 tot 255 om een kleurwaarde. De kleuren zijn een overgang r - g - b - terug naar r. uint32_t wiel (byte WheelPos) {if(WheelPos < 85) {return strip. Kleur (WheelPos * 3, 255 - WheelPos * 3, 0); } else if(WheelPos < 170) {WheelPos-= 85; terugkeer strip. Kleur (255 - WheelPos * 3, 0, WheelPos * 3); } else {WheelPos-= 170; terugkeer strip. Kleur (0, WheelPos * 3, 255 - WheelPos * 3); } }
/ ** * ^ ^ ^ * ~ ~ ~ ColorWave ~ ~ ~ * V V V * / void colorWave (uint8_t wachten) {int i, j, stripsize, Fietsen, zweven ang, rsin, gsin, azonde, offset;
statische int teek = 0; stripsize = strip.numPixels(); cyclus = stripsize * 25; keer rond de cirkel...
terwijl (++ Vink % cyclus) {offset = map2PI(tick);
voor (ik = 0; ik < stripsize; i ++) {ang = map2PI(i) - offset; rsin = sin(ang); gsin = zonde (2.0 * ang / 3.0 + map2PI(int(stripsize/6))); azonde = zonde (4.0 * ang / 5.0 + map2PI(int(stripsize/3))); strip.setPixelColor (i, strip. Color(trigScale(rsin), trigScale(gsin), trigScale(bsin))); }
strip.show(); delay(wait); }
}
/ ** * Schaal een waarde geretourneerd uit een trig functie op een bytewaarde. * [-1, + 1] -> [0, 254] * opmerking dat we voorbijgaan aan de mogelijke waarde van 255, voor efficiëntie, * en omdat niemand kundig voor onderscheid worden gemaakt zitten zal tussen de * helderheid van 254 en 255. * / byte trigScale(float val) {val += 1.0; / / verplaatsen tot [0.0, 2.0] val * = 127.0; / / verplaatsen tot [0,0, 254.0]
retour int(val) & 255; }
/ ** * Kaart integer dus dat [0, striplength] -> [0, 2PI] * / vlotter map2PI(int i) {terugkeer PI*2.0*float(i) / float(strip.numPixels());}
/ CODE