Created
May 7, 2018 05:37
-
-
Save RichardBronosky/77c88aaeab341bcf7ec66aeea770b5a7 to your computer and use it in GitHub Desktop.
Attempt at using GRBW NeoPixels with Particle Photon MCU
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This #include statement was automatically added by the Particle IDE. | |
#include "Adafruit_NeoPixel.h" | |
// Content of the above file copied from: | |
// https://github.com/adafruit/Adafruit_NeoPixel/blob/master/Adafruit_NeoPixel.h | |
// https://github.com/adafruit/Adafruit_NeoPixel/blob/master/Adafruit_NeoPixel.cpp | |
/* | |
* This is a RGB+W NeoPixel example, see extra-examples.cpp for a version | |
* with more explantory documentation, example routines, how to | |
* hook up your pixels and all of the pixel types that are supported. | |
* | |
*/ | |
/* ======================= includes ================================= */ | |
#include "Particle.h" | |
/* ======================= prototypes =============================== */ | |
uint32_t Wheel(byte WheelPos); | |
uint8_t red(uint32_t c); | |
uint8_t green(uint32_t c); | |
uint8_t blue(uint32_t c); | |
void colorWipe(uint32_t c, uint8_t wait); | |
void pulseWhite(uint8_t wait); | |
void rainbowFade2White(uint8_t wait, int rainbowLoops, int whiteLoops); | |
void whiteOverRainbow(uint8_t wait, uint8_t whiteSpeed, uint8_t whiteLength); | |
void fullWhite(); | |
void rainbowCycle(uint8_t wait); | |
void rainbow(uint8_t wait); | |
/* ======================= rgbw-strandtest.cpp ====================== */ | |
SYSTEM_MODE(AUTOMATIC); | |
// IMPORTANT: Set pixel COUNT, PIN and TYPE | |
#define PIXEL_PIN D2 | |
#define PIXEL_COUNT 7 | |
//#define PIXEL_TYPE NEO_GRB + NEO_KHZ800 | |
#define BRIGHTNESS 50 // 0 - 255 | |
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRBW + NEO_KHZ800); | |
int gamma[] = { | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, | |
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, | |
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, | |
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, | |
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16, | |
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25, | |
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, | |
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50, | |
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68, | |
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89, | |
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114, | |
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142, | |
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175, | |
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213, | |
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255 }; | |
void setup() { | |
strip.setBrightness(BRIGHTNESS); | |
strip.begin(); | |
strip.show(); // Initialize all pixels to 'off' | |
} | |
void loop() { | |
// Some example procedures showing how to display to the pixels: | |
// Do not run more than 15 seconds of these, or the b/g tasks | |
// will be blocked. | |
// -------------------------------------------------------------- | |
colorWipe(strip.Color(255, 0, 0), 50); // Red | |
colorWipe(strip.Color(0, 255, 0), 50); // Green | |
colorWipe(strip.Color(0, 0, 255), 50); // Blue | |
colorWipe(strip.Color(0, 0, 0, 255), 50); // White | |
//whiteOverRainbow(20,75,5); | |
//pulseWhite(5); | |
// fullWhite(); | |
// delay(2000); | |
//rainbowFade2White(3,3,1); | |
delay(2000); | |
} | |
// Input a value 0 to 255 to get a color value. | |
// The colours are a transition r - g - b - back to r. | |
uint32_t Wheel(byte WheelPos) { | |
WheelPos = 255 - WheelPos; | |
if(WheelPos < 85) { | |
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3,0); | |
} | |
if(WheelPos < 170) { | |
WheelPos -= 85; | |
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3,0); | |
} | |
WheelPos -= 170; | |
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0,0); | |
} | |
uint8_t red(uint32_t c) { | |
return (c >> 8); | |
} | |
uint8_t green(uint32_t c) { | |
return (c >> 16); | |
} | |
uint8_t blue(uint32_t c) { | |
return (c); | |
} | |
// Fill the dots one after the other with a color | |
void colorWipe(uint32_t c, uint8_t wait) { | |
for(uint16_t i=0; i<strip.numPixels(); i++) { | |
strip.setPixelColor(i, c); | |
strip.show(); | |
delay(wait); | |
} | |
} | |
void pulseWhite(uint8_t wait) { | |
for(int j = 0; j < 256 ; j++) { | |
for(uint16_t i=0; i<strip.numPixels(); i++) { | |
strip.setPixelColor(i, strip.Color(0,0,0, gamma[j] ) ); | |
} | |
delay(wait); | |
strip.show(); | |
} | |
for(int j = 255; j >= 0 ; j--){ | |
for(uint16_t i=0; i<strip.numPixels(); i++) { | |
strip.setPixelColor(i, strip.Color(0,0,0, gamma[j] ) ); | |
} | |
delay(wait); | |
strip.show(); | |
} | |
} | |
void rainbowFade2White(uint8_t wait, int rainbowLoops, int whiteLoops) { | |
float fadeMax = 100.0; | |
int fadeVal = 0; | |
uint32_t wheelVal; | |
int redVal, greenVal, blueVal; | |
for(int k = 0 ; k < rainbowLoops ; k ++) { | |
for(int j=0; j<256; j++) { // 5 cycles of all colors on wheel | |
for(int i=0; i< strip.numPixels(); i++) { | |
wheelVal = Wheel(((i * 256 / strip.numPixels()) + j) & 255); | |
redVal = red(wheelVal) * float(fadeVal/fadeMax); | |
greenVal = green(wheelVal) * float(fadeVal/fadeMax); | |
blueVal = blue(wheelVal) * float(fadeVal/fadeMax); | |
strip.setPixelColor( i, strip.Color( redVal, greenVal, blueVal ) ); | |
} | |
// First loop, fade in! | |
if(k == 0 && fadeVal < fadeMax-1) { | |
fadeVal++; | |
} | |
// Last loop, fade out! | |
else if(k == rainbowLoops - 1 && j > 255 - fadeMax ) { | |
fadeVal--; | |
} | |
strip.show(); | |
delay(wait); | |
} | |
} | |
delay(500); | |
for(int k = 0 ; k < whiteLoops ; k ++) { | |
for(int j = 0; j < 256 ; j++) { | |
for(uint16_t i=0; i < strip.numPixels(); i++) { | |
strip.setPixelColor(i, strip.Color(0,0,0, gamma[j] ) ); | |
} | |
strip.show(); | |
} | |
delay(2000); | |
for(int j = 255; j >= 0 ; j--) { | |
for(uint16_t i=0; i < strip.numPixels(); i++) { | |
strip.setPixelColor(i, strip.Color(0,0,0, gamma[j] ) ); | |
} | |
strip.show(); | |
} | |
} | |
delay(500); | |
} | |
void whiteOverRainbow(uint8_t wait, uint8_t whiteSpeed, uint8_t whiteLength ) { | |
if(whiteLength >= strip.numPixels()) whiteLength = strip.numPixels() - 1; | |
int head = whiteLength - 1; | |
int tail = 0; | |
int loops = 3; | |
int loopNum = 0; | |
static unsigned long lastTime = 0; | |
while(true) { | |
for(int j=0; j<256; j++) { | |
for(uint16_t i=0; i<strip.numPixels(); i++) { | |
if( (i >= tail && i <= head) | |
|| (tail > head && i >= tail) | |
|| (tail > head && i <= head) ) { | |
strip.setPixelColor(i, strip.Color(0,0,0, 255 ) ); | |
} else { | |
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); | |
} | |
} | |
if(millis() - lastTime > whiteSpeed) { | |
head++; | |
tail++; | |
if(head == strip.numPixels()) { | |
loopNum++; | |
} | |
lastTime = millis(); | |
} | |
if(loopNum == loops) return; | |
head %= strip.numPixels(); | |
tail %= strip.numPixels(); | |
strip.show(); | |
delay(wait); | |
} | |
} | |
} | |
void fullWhite() { | |
for(uint16_t i=0; i<strip.numPixels(); i++) { | |
strip.setPixelColor(i, strip.Color(0,0,0, 255 ) ); | |
} | |
strip.show(); | |
} | |
// Slightly different, this makes the rainbow equally distributed throughout | |
void rainbowCycle(uint8_t wait) { | |
uint16_t i, j; | |
for(j=0; j<256 * 5; j++) { // 5 cycles of all colors on wheel | |
for(i=0; i< strip.numPixels(); i++) { | |
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); | |
} | |
strip.show(); | |
delay(wait); | |
} | |
} | |
void rainbow(uint8_t wait) { | |
uint16_t i, j; | |
for(j=0; j<256; j++) { | |
for(i=0; i<strip.numPixels(); i++) { | |
strip.setPixelColor(i, Wheel((i+j) & 255)); | |
} | |
strip.show(); | |
delay(wait); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment