#include <FastLED.h>
//FASTLED
#define LEDstripPin 4
#define NUM_LEDS 255
#define COLOR_ORDER GRB
#define CHIPSET WS2812B
int j = 0;
int paletteIndex = 0;
float indexDelta = 255/NUM_LEDS;
CRGB leds[NUM_LEDS];
bool BassBeatTrigger = false;
bool BeatTrigger = false;
bool TrebleBeatTrigger = false;
DEFINE_GRADIENT_PALETTE( Rain_gp ) {
0, 255, 0, 0, //Red
20, 255, 0, 0, //Orange
61, 255, 255, 0, //Yellow
102, 0, 255, 0, //Green
143, 0, 0, 255, //Blue
184, 75,0, 130, //Indego
224, 148,0, 211, //Violet
255, 200, 0, 0}; //Red
CRGBPalette16 Rainbow(Rain_gp);
void setup()
{
FastLED.addLeds<WS2812B,LEDstripPin , GRB>(leds, NUM_LEDS);
fill_solid(leds, NUM_LEDS, CRGB( 0, 0, 0));
FastLED.show();
FastLED.setBrightness(255);
}
void loop()
{
RainbowStrobe();
BeatTrigger = true;
}
void RainbowStrobe(){ // RAINBOW STROBE
int randomLED = random8(0,NUM_LEDS-1);
int StrobeWidth =4; //random8(2,4);
//fill_palette(leds, NUM_LEDS, paletteIndex, 255/NUM_LEDS,Rainbow,ledDisplayBrihtnessValue,LINEARBLEND);
for( int i=0; i<NUM_LEDS; i++, j++)
{
if( j >= NUM_LEDS) // index rolls beyond the array ?
{
j = 0; // wrap around
}
float thisHue = float( i) * hue_increment;
leds[j] = CHSV( int(thisHue), 255, 255);
}
FastLED.show();
if (BeatTrigger == true ){
leds[randomLED] = CHSV(100, 0, 255);
for(int i = 1; i <= StrobeWidth; i++){
if (randomLED-i < 0){ // i have no idea how to use modulo % in an array
leds[(randomLED-i)% NUM_LEDS] = CHSV(100, 0, 255);
}
if(randomLED+i >= NUM_LEDS-1){
leds[(randomLED+i)%NUM_LEDS] = CHSV(100, 0, 255);
leds[randomLED-i] = CHSV(100, 0, 255);
}else{
leds[randomLED-i] = CHSV(100, 0, 255);
leds[randomLED+i] = CHSV(100, 0, 255);
}
}
BassBeatTrigger = false;
BeatTrigger = false;
TrebleBeatTrigger = false;
}
EVERY_N_MILLISECONDS(2){
paletteIndex++;
}
FastLED.setBrightness(255);
FastLED.show();
}