#include "FastLED.h"
// ColorWavesWithPalettes
// Animated shifting color waves, with several cross-fading color palettes.
// by Mark Kriegsman, August 2015
//
// Color palettes courtesy of cpt-city and its contributors:
// http://soliton.vm.bytemark.co.uk/pub/cpt-city/
//
// Color palettes converted for FastLED using "PaletteKnife" v1:
// http://fastled.io/tools/paletteknife/
//
#if FASTLED_VERSION < 3001000
#error "Requires FastLED 3.1 or later; check github for latest code."
#endif
#define DATA_PIN 5
//#define CLK_PIN 4
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS 204
const uint8_t SecLeds = 68;
#define BRIGHTNESS 255
CRGBArray<NUM_LEDS> leds; // leds = tira completa
CRGBSet Sec1(leds(0, 67)); // Sec1 = Tira inferior de <- izq. a der. Inicio LED 0 - Final LED 67
CRGBSet Sec2(leds(68, 135)); // Sec2 = Tira intermedia de -> der. a izq. Inicio LED 68 - Final LED 135
CRGBSet Sec3(leds(136, 203)); // Sec3 = Tira superior de <- der. a izq. Inicio LED 137 - Final LED 203
// ten seconds per color palette makes a good demo
// 20-120 is better for deployment
#define SECONDS_PER_PALETTE 10
void setup() {
delay(3000); // 3 second delay for recovery
// tell FastLED about the LED strip configuration
FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS)
//.setCorrection(TypicalLEDStrip) // cpt-city palettes have different color balance
.setDither(BRIGHTNESS < 255);
// set master brightness control
FastLED.setBrightness(BRIGHTNESS);
}
// Forward declarations of an array of cpt-city gradient palettes, and
// a count of how many there are. The actual color palette definitions
// are at the bottom of this file.
extern const TProgmemRGBGradientPalettePtr gGradientPalettes[];
extern const uint8_t gGradientPaletteCount;
// Current palette number from the 'playlist' of color palettes
uint8_t gCurrentPaletteNumber = 0;
CRGBPalette16 gCurrentPalette( CRGB::Black);
CRGBPalette16 gTargetPalette( gGradientPalettes[0] );
void loop() {
EVERY_N_SECONDS( SECONDS_PER_PALETTE ) {
gCurrentPaletteNumber = addmod8( gCurrentPaletteNumber, 1, gGradientPaletteCount);
gTargetPalette = gGradientPalettes[ gCurrentPaletteNumber ];
}
EVERY_N_MILLISECONDS(40) {
nblendPaletteTowardPalette( gCurrentPalette, gTargetPalette, 16);
}
colorwaves(gCurrentPalette);
FastLED.show();
FastLED.delay(20);
}
// This function draws color waves with an ever-changing,
// widely-varying set of parameters, using a color palette.
void colorwaves( CRGBPalette16& palette)
{
static uint16_t sPseudotime = 0;
static uint16_t sLastMillis = 0;
static uint16_t sHue16 = 0;
uint8_t sat8 = beatsin88( 87, 220, 250);
uint8_t brightdepth = beatsin88( 341, 96, 224);
uint16_t brightnessthetainc16 = beatsin88( 203, (25 * 256), (40 * 256));
uint8_t msmultiplier = beatsin88(147, 23, 60);
uint16_t hue16 = sHue16;//gHue * 256;
uint16_t hueinc16 = beatsin88(113, 300, 1500);
uint16_t ms = millis();
uint16_t deltams = ms - sLastMillis ;
sLastMillis = ms;
sPseudotime += deltams * msmultiplier;
sHue16 += deltams * beatsin88( 400, 5,9);
uint16_t brightnesstheta16 = sPseudotime;
for( uint16_t i = 0 ; i < SecLeds; i++) {
hue16 += hueinc16;
uint8_t hue8 = hue16 / 256;
uint16_t h16_128 = hue16 >> 7;
if( h16_128 & 0x100) {
hue8 = 255 - (h16_128 >> 1);
} else {
hue8 = h16_128 >> 1;
}
brightnesstheta16 += brightnessthetainc16;
uint16_t b16 = sin16( brightnesstheta16 ) + 32768;
uint16_t bri16 = (uint32_t)((uint32_t)b16 * (uint32_t)b16) / 65536;
uint8_t bri8 = (uint32_t)(((uint32_t)bri16) * brightdepth) / 65536;
bri8 += (255 - brightdepth);
uint8_t index = hue8;
//index = triwave8( index);
index = scale8( index, 240);
CRGB newcolor = ColorFromPalette( palette, index, bri8);
uint16_t pixelnumber = i;
uint16_t pixelnumber2 = i;
pixelnumber = (SecLeds - 1) - pixelnumber;
nblend( Sec1[pixelnumber], newcolor, 128);
nblend( Sec2[pixelnumber2], newcolor, 128);
nblend( Sec3[pixelnumber], newcolor, 128);
}
}
// Alternate rendering function just scrolls the current palette
// across the defined LED strip.
void palettetest( CRGB* ledarray, uint16_t numleds, const CRGBPalette16& gCurrentPalette)
{
static uint8_t startindex = 0;
startindex--;
fill_palette( ledarray, numleds, startindex, (256 / NUM_LEDS) + 1, gCurrentPalette, 255, LINEARBLEND);
}
// Gradient Color Palette definitions for 33 different cpt-city color palettes.
DEFINE_GRADIENT_PALETTE(ib_jul01_gp){ 0, 194, 1, 1, 94, 1, 29, 18, 132, 57, 131, 28, 255, 113, 1, 1 };
DEFINE_GRADIENT_PALETTE(es_vintage_57_gp){ 0, 2, 1, 1, 53, 18, 1, 0, 104, 69, 29, 1, 153, 167, 135, 10, 255, 46, 56, 4 };
DEFINE_GRADIENT_PALETTE(es_vintage_01_gp){ 0, 4, 1, 1, 51, 16, 0, 1, 76, 97, 104, 3, 101, 255, 131, 19, 127, 67, 9, 4, 153, 16, 0, 1, 229, 4, 1, 1, 255, 4, 1, 1 };
DEFINE_GRADIENT_PALETTE(es_rivendell_15_gp){ 0, 1, 14, 5, 101, 16, 36, 14, 165, 56, 68, 30, 242, 150, 156, 99, 255, 150, 156, 99 };
DEFINE_GRADIENT_PALETTE(rgi_15_gp){ 0, 4, 1, 31, 31, 55, 1, 16, 63, 197, 3, 7, 95, 59, 2, 17, 127, 6, 2, 34, 159, 39, 6, 33, 191, 112, 13, 32, 223, 56, 9, 35, 255, 22, 6, 38 };
DEFINE_GRADIENT_PALETTE(retro2_16_gp){ 0, 188, 135, 1, 255, 46, 7, 1 };
DEFINE_GRADIENT_PALETTE(Analogous_1_gp){ 0, 3, 0, 255, 63, 23, 0, 255, 127, 67, 0, 255, 191, 142, 0, 45, 255, 255, 0, 0 };
DEFINE_GRADIENT_PALETTE(es_pinksplash_08_gp){ 0, 126, 11, 255, 127, 197, 1, 22, 175, 210, 157, 172, 221, 157, 3, 112, 255, 157, 3, 112 };
DEFINE_GRADIENT_PALETTE(es_pinksplash_07_gp){ 0, 229, 1, 1, 61, 242, 4, 63, 101, 255, 12, 255, 127, 249, 81, 252, 153, 255, 11, 235, 193, 244, 5, 68, 255, 232, 1, 5 };
DEFINE_GRADIENT_PALETTE(Coral_reef_gp){ 0, 40, 199, 197, 50, 10, 152, 155, 96, 1, 111, 120, 96, 43, 127, 162, 139, 10, 73, 111, 255, 1, 34, 71 }; // CORAL OCEAN
DEFINE_GRADIENT_PALETTE(es_ocean_breeze_068_gp){ 0, 100, 156, 153, 51, 1, 99, 137, 101, 1, 68, 84, 104, 35, 142, 168, 178, 0, 63, 117, 255, 1, 10, 10 };
DEFINE_GRADIENT_PALETTE(es_ocean_breeze_036_gp){ 0, 1, 6, 7, 89, 1, 99, 111, 153, 144, 209, 255, 255, 0, 73, 82 };
DEFINE_GRADIENT_PALETTE(departure_gp){ 0, 8, 3, 0, 42, 23, 7, 0, 63, 75, 38, 6, 84, 169, 99, 38, 106, 213, 169, 119, 116, 255, 255, 255, 138, 135, 255, 138, 148, 22, 255, 24, 170, 0, 255, 0, 191, 0, 136, 0, 212, 0, 55, 0, 255, 0, 55, 0 };
DEFINE_GRADIENT_PALETTE(es_landscape_64_gp){ 0, 0, 0, 0, 37, 2, 25, 1, 76, 15, 115, 5, 127, 79, 213, 1, 128, 126, 211, 47, 130, 188, 209, 247, 153, 144, 182, 205, 204, 59, 117, 250, 255, 1, 37, 192 };
DEFINE_GRADIENT_PALETTE(es_landscape_33_gp){ 0, 1, 5, 0, 19, 32, 23, 1, 38, 161, 55, 1, 63, 229, 144, 1, 66, 39, 142, 74, 255, 1, 4, 1 };
DEFINE_GRADIENT_PALETTE(rainbowsherbet_gp){ 0, 255, 33, 4, 43, 255, 68, 25, 86, 255, 7, 25, 127, 255, 82, 103, 170, 255, 255, 242, 209, 42, 255, 22, 255, 87, 255, 65 };
DEFINE_GRADIENT_PALETTE(gr65_hult_gp){ 0, 247, 176, 247, 48, 255, 136, 255, 89, 220, 29, 226, 160, 7, 82, 178, 216, 1, 124, 109, 255, 1, 124, 109 };
DEFINE_GRADIENT_PALETTE(gr64_hult_gp){ 0, 1, 124, 109, 66, 1, 93, 79, 104, 52, 65, 1, 130, 115, 127, 1, 150, 52, 65, 1, 201, 1, 86, 72, 239, 0, 55, 45, 255, 0, 55, 45 };
DEFINE_GRADIENT_PALETTE(GMT_drywet_gp){ 0, 47, 30, 2, 42, 213, 147, 24, 84, 103, 219, 52, 127, 3, 219, 207, 170, 1, 48, 214, 212, 1, 1, 111, 255, 1, 7, 33 };
DEFINE_GRADIENT_PALETTE(ib15_gp){ 0, 113, 91, 147, 72, 157, 88, 78, 89, 208, 85, 33, 107, 255, 29, 11, 141, 137, 31, 39, 255, 59, 33, 89 };
DEFINE_GRADIENT_PALETTE(Fuschia_7_gp){ 0, 43, 3, 153, 63, 100, 4, 103, 127, 188, 5, 66, 191, 161, 11, 115, 255, 135, 20, 182 };
DEFINE_GRADIENT_PALETTE(es_emerald_dragon_08_gp){ 0, 97, 255, 1, 101, 47, 133, 1, 178, 13, 43, 1, 255, 2, 10, 1 };
DEFINE_GRADIENT_PALETTE(lava_gp){ 0, 0, 0, 0, 46, 18, 0, 0, 96, 113, 0, 0, 108, 142, 3, 1, 119, 175, 17, 1, 146, 213, 44, 2, 174, 255, 82, 4, 188, 255, 115, 4, 202, 255, 156, 4, 218, 255, 203, 4, 234, 255, 255, 4, 244, 255, 255, 71, 255, 255, 255, 255 };
DEFINE_GRADIENT_PALETTE(fire_gp){ 0, 1, 1, 0, 76, 32, 5, 0, 146, 192, 24, 0, 197, 220, 105, 5, 240, 252, 255, 31, 250, 252, 255, 111, 255, 255, 255, 255 };
DEFINE_GRADIENT_PALETTE(Colorfull_gp){ 0, 10, 85, 5, 25, 29, 109, 18, 60, 59, 138, 42, 93, 83, 99, 52, 106, 110, 66, 64, 109, 123, 49, 65, 113, 139, 35, 66, 116, 192, 117, 98, 124, 255, 255, 137, 168, 100, 180, 155, 255, 22, 121, 174 };
DEFINE_GRADIENT_PALETTE(Magenta_Evening_gp){ 0, 71, 27, 39, 31, 130, 11, 51, 63, 213, 2, 64, 70, 232, 1, 66, 76, 252, 1, 69, 108, 123, 2, 51, 255, 46, 9, 35 };
DEFINE_GRADIENT_PALETTE(Pink_Purple_gp){ 0, 19, 2, 39, 25, 26, 4, 45, 51, 33, 6, 52, 76, 68, 62, 125, 102, 118, 187, 240, 109, 163, 215, 247, 114, 217, 244, 255, 122, 159, 149, 221, 149, 113, 78, 188, 183, 128, 57, 155, 255, 146, 40, 123 };
DEFINE_GRADIENT_PALETTE(Sunset_Real_gp){ 0, 120, 0, 0, 22, 179, 22, 0, 51, 255, 104, 0, 85, 167, 22, 18, 135, 100, 0, 103, 198, 16, 0, 130, 255, 0, 0, 160 };
DEFINE_GRADIENT_PALETTE(es_autumn_19_gp){ 0, 26, 1, 1, 51, 67, 4, 1, 84, 118, 14, 1, 104, 137, 152, 52, 112, 113, 65, 1, 122, 133, 149, 59, 124, 137, 152, 52, 135, 113, 65, 1, 142, 139, 154, 46, 163, 113, 13, 1, 204, 55, 3, 1, 249, 17, 1, 1, 255, 17, 1, 1 };
DEFINE_GRADIENT_PALETTE(BlacK_Blue_Magenta_White_gp){ 0, 0, 0, 0, 42, 0, 0, 45, 84, 0, 0, 255, 127, 42, 0, 255, 170, 255, 0, 255, 212, 255, 55, 255, 255, 255, 255, 255 };
DEFINE_GRADIENT_PALETTE(BlacK_Magenta_Red_gp){ 0, 0, 0, 0, 63, 42, 0, 45, 127, 255, 0, 255, 191, 255, 0, 45, 255, 255, 0, 0 };
DEFINE_GRADIENT_PALETTE(BlacK_Red_Magenta_Yellow_gp){ 0, 0, 0, 0, 42, 42, 0, 0, 84, 255, 0, 0, 127, 255, 0, 45, 170, 255, 0, 255, 212, 255, 55, 45, 255, 255, 255, 0 };
DEFINE_GRADIENT_PALETTE(Blue_Cyan_Yellow_gp){ 0, 0, 0, 255, 63, 0, 55, 255, 127, 0, 255, 255, 191, 42, 255, 45, 255, 255, 255, 0 };
DEFINE_GRADIENT_PALETTE(bhw1_01_gp){ 0, 227, 101, 3, 117, 194, 18, 19, 255, 92, 8, 192 };
DEFINE_GRADIENT_PALETTE(curvature_gp){ 0, 0, 0, 0, 114, 0, 0, 255, 126, 22, 55, 255, 127, 0, 255, 255, 127, 255, 255, 255, 127, 255, 255, 0, 128, 255, 55, 0, 140, 255, 0, 0, 255, 255, 0, 255 };
DEFINE_GRADIENT_PALETTE(spectrums_rainbow_002_gp){ 12, 255, 0, 0, 38, 255, 97, 0, 63, 255, 255, 0, 89, 0, 255, 0, 114, 0, 55, 0, 140, 0, 255, 255, 165, 0, 0, 255, 191, 10, 0, 47, 216, 213, 57, 214, 242, 255, 0, 0 };
DEFINE_GRADIENT_PALETTE(bhw2_xmas_gp){ 0, 0, 12, 0, 40, 0, 55, 0, 66, 1, 117, 2, 77, 1, 84, 1, 81, 0, 55, 0, 119, 0, 12, 0, 153, 42, 0, 0, 181, 121, 0, 0, 204, 255, 12, 8, 224, 121, 0, 0, 244, 42, 0, 0, 255, 42, 0, 0 };
const TProgmemRGBGradientPalettePtr gGradientPalettes[] = {
ib_jul01_gp, es_vintage_57_gp, es_vintage_01_gp, es_rivendell_15_gp, rgi_15_gp, retro2_16_gp, Analogous_1_gp, es_pinksplash_08_gp, es_pinksplash_07_gp, Coral_reef_gp,
es_ocean_breeze_068_gp, es_ocean_breeze_036_gp, departure_gp, es_landscape_64_gp, es_landscape_33_gp, rainbowsherbet_gp, gr65_hult_gp, gr64_hult_gp, GMT_drywet_gp,
ib15_gp, Fuschia_7_gp, es_emerald_dragon_08_gp, lava_gp, fire_gp, Colorfull_gp, Magenta_Evening_gp, Pink_Purple_gp, Sunset_Real_gp, es_autumn_19_gp,
BlacK_Blue_Magenta_White_gp, BlacK_Magenta_Red_gp, BlacK_Red_Magenta_Yellow_gp, Blue_Cyan_Yellow_gp, bhw1_01_gp, curvature_gp, spectrums_rainbow_002_gp, bhw2_xmas_gp
};
// Count of how many cpt-city gradients are defined:
const uint8_t gGradientPaletteCount =
sizeof( gGradientPalettes) / sizeof( TProgmemRGBGradientPalettePtr );