LED Strip Pattern Collection: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 54: | Line 54: | ||
} | } | ||
</pre> | |||
=== HSV to RGB === | |||
Really useful function returns RGB values from Hue Saturation Brightness! Adapted from teldredge's [http://funkboxing.com/wordpress/wp-content/_postfiles/sk_qLEDFX_POST.ino FAST_SPI LED FX EXAMPLES] for use in the NeoPixel lib | |||
<pre> | |||
void HSVtoRGB(int hue, int sat, int val,int *colors) { | |||
int r, g, b, base; | |||
// hue: 0-359, sat: 0-255, val (lightness): 0-255 | |||
if (sat == 0) { // Achromatic color (gray). | |||
colors[0]=val; | |||
colors[1]=val; | |||
colors[2]=val; | |||
} else { | |||
base = ((255 - sat) * val)>>8; | |||
switch(hue/60) { | |||
case 0: | |||
colors[0] = val; | |||
colors[1] = (((val-base)*hue)/60)+base; | |||
colors[2] = base; | |||
break; | |||
case 1: | |||
colors[0] = (((val-base)*(60-(hue%60)))/60)+base; | |||
colors[1] = val; | |||
colors[2] = base; | |||
break; | |||
case 2: | |||
colors[0] = base; | |||
colors[1] = val; | |||
colors[2] = (((val-base)*(hue%60))/60)+base; | |||
break; | |||
case 3: | |||
colors[0] = base; | |||
colors[1] = (((val-base)*(60-(hue%60)))/60)+base; | |||
colors[2] = val; | |||
break; | |||
case 4: | |||
colors[0] = (((val-base)*(hue%60))/60)+base; | |||
colors[1] = base; | |||
colors[2] = val; | |||
break; | |||
case 5: | |||
colors[0] = val; | |||
colors[1] = base; | |||
colors[2] = (((val-base)*(60-(hue%60)))/60)+base; | |||
break; | |||
} | |||
} | |||
} | |||
</pre> | </pre> |
Revision as of 20:02, 20 July 2013
Note: Some of these may be written specifically for octows2811, neopixel or fastSPI, but it's usually easy to port between them (change the show and set color functions).
Random Twinkle
// number, twinkle color, background color, delay // twinkleRand(5,strip.Color(255,255,255),strip.Color(255, 0, 100),90); // twinkle random number of pixels void twinkleRand(int num,uint32_t c,uint32_t bg,int wait) { // set background stripSet(bg,0); // for each num for (int i=0; i<num; i++) { strip.setPixelColor(random(strip.numPixels()),c); } strip.show(); delay(wait); }
Set All Pixels Quickly
// quickly set the entire strip a color void stripSet(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); } // move the show outside the loop strip.show(); delay(wait); }
Simple Wave
// very simple wave: velocity, cycles,delay between frames // simpleWave(0.03,5,10); void simpleWave(float rate,int cycles, int wait) { float pos=0.0; // cycle through x times for(int x=0; x<(strip.numPixels()*cycles); x++) { pos = pos+rate; for(int i=0; i<strip.numPixels(); i++) { // sine wave, 3 offset waves make a rainbow! float level = sin(i+pos) * 127 + 128; // set color level strip.setPixelColor(i,(int)level,0,0); } strip.show(); delay(wait); } }
HSV to RGB
Really useful function returns RGB values from Hue Saturation Brightness! Adapted from teldredge's FAST_SPI LED FX EXAMPLES for use in the NeoPixel lib
void HSVtoRGB(int hue, int sat, int val,int *colors) { int r, g, b, base; // hue: 0-359, sat: 0-255, val (lightness): 0-255 if (sat == 0) { // Achromatic color (gray). colors[0]=val; colors[1]=val; colors[2]=val; } else { base = ((255 - sat) * val)>>8; switch(hue/60) { case 0: colors[0] = val; colors[1] = (((val-base)*hue)/60)+base; colors[2] = base; break; case 1: colors[0] = (((val-base)*(60-(hue%60)))/60)+base; colors[1] = val; colors[2] = base; break; case 2: colors[0] = base; colors[1] = val; colors[2] = (((val-base)*(hue%60))/60)+base; break; case 3: colors[0] = base; colors[1] = (((val-base)*(60-(hue%60)))/60)+base; colors[2] = val; break; case 4: colors[0] = (((val-base)*(hue%60))/60)+base; colors[1] = base; colors[2] = val; break; case 5: colors[0] = val; colors[1] = base; colors[2] = (((val-base)*(60-(hue%60)))/60)+base; break; } } }