Here's my code:
#include "FastLED.h"
#define LED_PIN_FRONT 6 //define front controller pin
#define NUM_LEDS 144 //Total LEDs on each strip for quadrant
#define BAR_LENGTH 10 //number of LEDs for "bars"
//change values for LED colors
#define RED_VAL 0x0F
#define GREEN_VAL 0x0F
#define BLUE_VAL 0xFF
//delay values
#define SPEED_DELAY 20 //defines speed of LED sweep
#define SWEEP_DELAY 50 //defines how long LEDs wait before sweeping again
CRGB ledsFront[NUM_LEDS];
void setup()
{
FastLED.addLeds<WS2812,LED_PIN_FRONT,GRB>(ledsFront,NUM_LEDS).setCorrection( TypicalLEDStrip );
}
void loop() {
Pulse(RED_VAL, GREEN_VAL, BLUE_VAL, BAR_LENGTH, SPEED_DELAY, SWEEP_DELAY);
}
void Pulse(byte redVal, byte greenVal, byte blueVal, int barLen, int speedDelay, int sweepDelay){
CenterToOutside(redVal, greenVal, blueVal, barLen, speedDelay, sweepDelay);
OutsideToCenter(redVal, greenVal, blueVal, barLen, speedDelay, sweepDelay);
}
void CenterToOutside(byte redVal, byte greenVal, byte blueVal, int barLen, int speedDelay, int sweepDelay) {
int i;
for(i=((NUM_LEDS-barLen)/2); i>=0; i-=2) {
setAll(0,0,0);
setPixelFront(i, redVal, greenVal, blueVal);
for(int j = 1; j <= barLen; j++) {
setPixelFront(i+j, redVal, greenVal, blueVal);
}
setPixelFront(i+barLen+1, redVal, greenVal, blueVal);
setPixelFront(NUM_LEDS-i, redVal, greenVal, blueVal);
for(int j = 1; j <= barLen; j++) {
setPixelFront(NUM_LEDS-i-j, redVal, greenVal, blueVal);
}
setPixelFront(NUM_LEDS-i-barLen-1, redVal, greenVal, blueVal);
FastLED.show();
delay(speedDelay);
}
delay(sweepDelay);
}
void OutsideToCenter(byte redVal, byte greenVal, byte blueVal, int barLen, int speedDelay, int sweepDelay) {
int i;
for(i=0; i<=((NUM_LEDS-barLen)/2) ; i+=2) {
setAll(0,0,0);
setPixelFront(i, redVal, greenVal, blueVal);
for(int j = 1; j <= barLen; j++) {
setPixelFront(i+j, redVal, greenVal, blueVal);
}
setPixelFront(i+barLen+1, redVal, greenVal, blueVal);
setPixelFront(NUM_LEDS-i, redVal, greenVal, blueVal);
for(int j = 1; j <= barLen; j++) {
setPixelFront(NUM_LEDS-i-j, redVal, greenVal, blueVal);
}
setPixelFront(NUM_LEDS-i-barLen-1, redVal, greenVal, blueVal);
FastLED.show();
delay(speedDelay);
}
delay(sweepDelay);
}
void setPixelFront(int Pixel, byte red, byte green, byte blue) {
ledsFront[Pixel].r = red;
ledsFront[Pixel].g = green;
ledsFront[Pixel].b = blue;
}
void setAll(byte red, byte green, byte blue) {
for(int i = 0; i < NUM_LEDS; i++ ) {
setPixelFront(i, red, green, blue);
}
FastLED.show();
}