Flashiga steampunk skyddsglasögon (5 / 6 steg)
Steg 5: kod
Jag använde en något modifierad version av koden jag använde i mitt infinity bord med casual verktyg projekt. Jag satte det här för nedladdning och plug and play ändamål men det är lätt att hitta inspiration (och alla nödvändiga bibliotek) antingen på adafruit eller här på Instructables webbplats. Min kod är ganska grundläggande och cyklar olika skärmar av unika färger, rainbow, snurrar etc.
Nästa steg (när jag har tid) kommer att vara att lägga till en liten piezo eller mikrofon och göra skärmen reagerar på musik som en fysisk equalizer animation (där anteckningar skulle ändra färg och volym ljusintensiteten för anföra som exempel).
Uppdateringar på detta någon gång i framtiden.
KOD:
#include
#define PINdroite 1 #define STRIPSIZE 12
Parametern 1 = antal pixlar i remsa / / Parameter 2 = pin-kod (de flesta är giltigt) / / Parameter 3 = pixel typ flaggor, Lägg ihop efter behov: / / NEO_KHZ800 800 KHz bitstream (de flesta NeoPixel produkter w/WS2812 lysdioder) / / NEO_KHZ400 400 KHz (classic "v1" (inte v2) FLORA pixlar, WS2811 drivrutiner) / / NEO_GRB pixlar är trådbundet för GRB bitstream (de flesta NeoPixel produkter) / / NEO_RGB pixlar är trådbundet för RGB bitstream (v1 FLORA pixlar inte v2) Adafruit_NeoPixel strip = Adafruit_NeoPixel (STRIPSIZE, PINdroite, NEO_GRB + NEO_KHZ800);
void setup() {strip.begin(); strip.setBrightness(60); / / lägre ljusstyrka och spara ögonglober! strip.show(); / / initiera alla pixlar till "off"}
void loop() {/ / några exempel förfaranden visar hur till pixlarna ska visas: colorWipe (remsa. Color(0,0,0), 25); Svart colorWipe (remsa. Color(64, 0, 0), 100); Röda colorWipe (remsa. Color(0, 64, 0), 100); Grön colorWipe (remsa. Color(0, 0, 64), 100); Blå colorWave(75); colorWipe (remsa. Color(0,0,0), 100); Svart rainbow(15); colorWipe (remsa. Color(0,0,0), 100); Svart rainbowCycle(15); colorWipe (remsa. Color(0,0,0), 100); Svart colorWave(30); }
Fyll prickar en efter den andra med en färg void colorWipe (uint32_t c, uint8_t vänta) {för (uint16_t jag = 0; jag
void rainbow (uint8_t vänta) {uint16_t i, j.
för (j = 0; j < 256; j ++) {för (jag = 0; jag
Något annorlunda, detta gör regnbågen jämnt fördelat i hela void rainbowCycle (uint8_t vänta) {uint16_t i, j.
för (j = 0; j < 256 * 5; j ++) {/ / 5 cykler av alla färger på hjul för (jag = 0; jag < strip.numPixels(); i ++) {strip.setPixelColor (jag, rullar (((i * 256/strip.numPixels()) + j) & 255));} strip.show(); delay(wait);}}
Ange ett värde 0 till 255 att få ett färgvärde. Färgerna är en övergång r - g - b - tillbaka till r. uint32_t hjul (byte WheelPos) {if(WheelPos < 85) {return strip. Färg (WheelPos * 3, 255 - WheelPos * 3, 0); } annat if(WheelPos < 170) {WheelPos-= 85; retur strip. Färg (255 - WheelPos * 3, 0, WheelPos * 3); } annat {WheelPos-= 170; return strip. Färg (0, WheelPos * 3, 255 - WheelPos * 3); } }
/ ** * ^ ^ ^ * ~ ~ ~ ColorWave ~ ~ ~ * V V V * / void colorWave (uint8_t vänta) {int i, j, stripsize, cykel, flyta ang rsin, gsin, synd, offset;
statisk int fästing = 0; stripsize = strip.numPixels(); Cycle = stripsize * 25; gånger runt cirkeln...
medan (++ kryssa % cykel) {offset = map2PI(tick);
för (jag = 0; jag < stripsize; i ++) {ang = map2PI(i) - offset, rsin = sin(ang); gsin = synd (2.0 * ang / 3.0 + map2PI(int(stripsize/6))); synd = synd (4.0 * ang / 5.0 + map2PI(int(stripsize/3))), strip.setPixelColor (i, strip. Color(trigScale(rsin), trigScale(gsin), trigScale(bsin))); }
Strip.show(); Delay(Wait); }
}
/ ** * Skala ett värde returneras från en trig funktion till ett byte-värde. * [-1, + 1] -> [0, 254] * OBS att förbigås värdet 255, för effektivitet, * och eftersom ingen kommer att kunna skilja mellan den * ljusstyrka på 254 och 255. * / byte trigScale(float val) {val += 1,0; / / flytta allt till [0,0, 2.0] val * = 127.0; / / flytta allt till [0.0, 254.0]
återgå int(val) & 255; }
/ ** * Mappa ett heltal så att [0, striplength] -> [0, 2PI] * / flyta map2PI(int i) {return PI*2.0*float(i) / float(strip.numPixels());}
/ KOD