#include <FastLED.h>
FASTLED_USING_NAMESPACE
#define LED_1_PIN 2
#define NUM_STRIPS 1
#define NUM_LEDS_PER_STRIP 50
#define LED_TYPE WS2811
#define COLOR_ORDER BRG
#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))
#define UPDATES_PER_SECOND 80
#define MAX_BLEND 15 //
#define DURATION_SECS 6 * 60 * 60
CRGB leds[NUM_STRIPS][NUM_LEDS_PER_STRIP];
CRGBPalette16 currentLed1Palette;
CRGBPalette16 nextLed1Palette;
uint8_t gCurrentPaletteNumber = 0; // Index number of which pattern is current
uint8_t paletteIndex = 0;
uint8_t brightness;
DEFINE_GRADIENT_PALETTE( black_green_pink ) {
0, 0, 0, 0, //black
128, 42, 136, 128, //wierd green
255, 254 ,0, 255, // pink
};
DEFINE_GRADIENT_PALETTE( black_purple_pink ) {
0, 0, 0, 0, //black
128, 42, 45, 136, //purple
255, 254 ,0, 255, // pink
};
void setup() {
// put your setup code here, to run once:
brightness = 255;
FastLED.addLeds<LED_TYPE, LED_1_PIN, COLOR_ORDER>(leds[0], NUM_LEDS_PER_STRIP).setCorrection( TypicalLEDStrip );
FastLED.setBrightness( brightness );
nextPalette();
Serial.begin(9600);
}
CRGBPalette16 led1PalettesNew[] = {black_green_pink, black_purple_pink};
void loop() {
// put your main code here, to run repeatedly:
//EVERY_N_MILLISECONDS( 10 ) { paletteIndex++;} // moves the palette along the strip
EVERY_N_SECONDS( 20 ) { nextPalette(); } // change palette periodically
fillLEDsFromPaletteColors();
FastLED.show();
FastLED.delay(1000 / UPDATES_PER_SECOND);
}
void nextPalette()
{
currentLed1Palette = led1PalettesNew[gCurrentPaletteNumber % ARRAY_SIZE( led1PalettesNew )];
gCurrentPaletteNumber++;
nextLed1Palette = led1PalettesNew[gCurrentPaletteNumber % ARRAY_SIZE( led1PalettesNew )];
}
// --------
// Patterns
// --------
void fillLEDsFromPaletteColors()
{
uint8_t sinBeat1 = beatsin8(10, 20, 255, 0, 0);
uint8_t sinBeat2 = beatsin8(5, 20, 255, 1000, 0);
fill_palette(leds[0], NUM_LEDS_PER_STRIP, paletteIndex, 255/NUM_LEDS_PER_STRIP, currentLed1Palette, (sinBeat1+sinBeat2)/2, LINEARBLEND);
nblendPaletteTowardPalette(currentLed1Palette, nextLed1Palette, MAX_BLEND);
}