Arduino & Neopixel Cola flaska Party ljus (4 / 5 steg)
Steg 4: Koden
Vår ursprungliga ambition var att göra ljuset musik-känslig. Men mellan mycket varierande bullernivå, behovet av en potentiometer justera mic-känslighet, och det faktum att partiet var den kvällen, vi övergav försöken att få ett Fast Fourier Transform bibliotek och Neopixel ringer prata med varandra *, och gick bara med Neopixel bibliotekets mycket vacker strandtest rutin:
< p > #include < br > #ifdef __AVR__
#include
#endif < /p >< p > #define PIN 6 < /p >< p > / / Parameter 1 = antal pixlar i remsa
Parameter 2 = Arduino pin-kod (de flesta är giltig)
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 kopplat för GRB bitstream (de flesta NeoPixel produkter)
NEO_RGB pixlar är kopplat för RGB bitstream (v1 FLORA pixlar, inte v2)
NEO_RGBW pixlar är kopplat för RGBW bitstream (NeoPixel RGBW produkter)
Adafruit_NeoPixel strip = Adafruit_NeoPixel (36, PIN, NEO_GRB + NEO_KHZ800); < /p >< p > / / viktiga: för att minska NeoPixel burnout risk, lägga till 1000 uF kondensator över
pixel power leads, lägga till 300-500 ohms motstånd på första pixel data ingång
och minimera avståndet mellan Arduino och första pixel. Undvika att ansluta
på en levande krets... om du måste, Anslut GND först. < /p >< p > void setup() {
Detta är för prydnadssak 5V 16MHz, kan du ta bort dessa tre rader om du inte använder en fasad
#if definieras (__AVR_ATtiny85__)
om (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
Slutet av prydnadssak speciella koden < /p >< p > strip.begin();
Strip.show(); Initiera alla pixlar till "off"
} < /p >< p > void loop() {
Några exempel förfaranden visar hur till pixlarna ska visas:
colorWipe (remsa. Color(255, 0, 0), 50); Röd
colorWipe (remsa. Color(0, 255, 0), 50); Grön
colorWipe (remsa. Color(0, 0, 255), 50); Blå
colorWipe (remsa. Color(0, 0, 0, 255), 50); Vit RGBW
Skicka en teater pixel jakt i...
theaterChase (remsa. Color(127, 127, 127), 50); Vit
theaterChase (remsa. Color(127, 0, 0), 50); Röd
theaterChase (remsa. Color(0, 0, 127), 50); Blå < /p >< p > rainbow(20);
rainbowCycle(20);
theaterChaseRainbow(50);
} < /p >< p > / / fylla 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 < /p >< p > annullera rainbow (uint8_t vänta) {
uint16_t i, j; < /p >< p > för (j = 0; j < 256; j ++) {
för (jag = 0; jag < /p >< p > / / något annorlunda, detta gör regnbågen jämnt fördelat i hela
void rainbowCycle (uint8_t vänta) {
uint16_t i, j; < /p >< p > 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 (i, hjulet (((i * 256/strip.numPixels()) + j) & 255));
}
Strip.show();
Delay(Wait);
}
} < /p >< p > //Theatre-style krypande lampor.
void theaterChase (uint32_t c, uint8_t vänta) {
för (int j = 0; j < 10; j ++) {//do 10 cykler för att jaga
för (int q = 0; d < 3; q ++) {
för (uint16_t jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (jag + q, c); aktivera varje tredje pixel
}
Strip.show(); < /p >< p > delay(wait); < /p >< p > för (uint16_t jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (jag + q, 0); Inaktivera alla bildpunkter på tredje
}
}
}
} < /p >< p > //Theatre-style krypande lampor med regnbågseffekt
void theaterChaseRainbow (uint8_t vänta) {
för (int j = 0; j < 256; j ++) {/ / cykla alla 256 färger i hjulet
för (int q = 0; d < 3; q ++) {
för (uint16_t jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (i + q, rullar ((i + j) % 255)); aktivera varje tredje pixel
}
Strip.show(); < /p >< p > delay(wait); < /p >< p > för (uint16_t jag = 0; jag < strip.numPixels(); i = i + 3) {
strip.setPixelColor (jag + q, 0); Inaktivera alla bildpunkter på tredje
}
}
}
} < /p >< p > / / 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) {
WheelPos = 255 - WheelPos;
IF(WheelPos < 85) {
returnera strip. Färg (255 - WheelPos * 3, 0, WheelPos * 3);
}
IF(WheelPos < 170) {
WheelPos-= 85.
returnera strip. Färg (0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos-= 170;
returnera strip. Färg (WheelPos * 3, 255 - WheelPos * 3, 0);
} < /p >
* Vi har sedan lagt till ljudkänslighet med en automatisk justering mic chip. Om det finns intresse för den gaffeln av detta projekt låt oss veta i kommentarerna och vi ska skriva det upp.