By going through the FastLED example "Colorpalatte"; I was able to modify that sketch enough to do something very similar to what I've been looking for.
#include <FastLED.h>
#define LED_PIN 5
#define NUM_LEDS 12
#define BRIGHTNESS 255
#define LED_TYPE NEOPIXEL
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
/////////////////////////////
/////////// Speed ///////////
#define UPDATES_PER_SECOND 36
/////////////////////////////
CRGBPalette16 currentPalette;
TBlendType currentBlending;
extern CRGBPalette16 Preset;
extern const TProgmemPalette16 Preset_p PROGMEM;
extern const TProgmemPalette16 Preset2_p PROGMEM;
extern const TProgmemPalette16 Wide_p PROGMEM;
void setup() {
delay( 3000 ); // power-up safety delay
FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, NUM_LEDS);
FastLED.setBrightness( BRIGHTNESS );
currentPalette = Preset_p;
currentBlending = LINEARBLEND;
}
void loop()
{
ChangePalettePeriodically();
static uint8_t startIndex = 0;
startIndex = startIndex + 1; /* motion speed */
FillLEDsFromPaletteColors( startIndex);
FastLED.show();
FastLED.delay(1000 / UPDATES_PER_SECOND);
}
void FillLEDsFromPaletteColors( uint8_t colorIndex)
{
//////////////////////////////
uint8_t brightness = 255;
//////////////////////////////
for ( int i = 0; i < NUM_LEDS; i++) {
leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
////////////////////////////////////////////////////////////
///////////////// Changes the width of each color //////////
colorIndex += 3;
////////////////////////////////////////////////////////////
}
}
void ChangePalettePeriodically()
{
uint8_t secondHand = (millis() / 1000) % 60;
static uint8_t lastSecond = 99;
if ( lastSecond != secondHand) {
lastSecond = secondHand;
if ( secondHand == 0) {
currentPalette = Preset_p;
currentBlending = LINEARBLEND;
}
if ( secondHand == 20) {
currentPalette = Wide_p;
currentBlending = LINEARBLEND;
}
if ( secondHand == 40) {
currentPalette = Preset2_p;
currentBlending = LINEARBLEND;
}
if ( secondHand == 55) {
currentPalette = Preset2_p;
currentBlending = NOBLEND;
}
}
}
const TProgmemPalette16 Preset_p PROGMEM =
{ ////////////////////
CRGB::Red,
CRGB::Red,
CRGB::Purple,
CRGB::Purple,
CRGB::Cyan,
CRGB::Cyan,
CRGB::Purple,
CRGB::Purple,
CRGB::Red,
CRGB::Red,
CRGB::Purple,
CRGB::Purple,
CRGB::Cyan,
CRGB::Cyan,
CRGB::Purple,
CRGB::Purple,
/////////////////////
};
const TProgmemPalette16 Preset2_p PROGMEM =
{ ////////////////////
CRGB::Red,
CRGB::Purple,
CRGB::Cyan,
CRGB::Purple,
CRGB::Red,
CRGB::Purple,
CRGB::Cyan,
CRGB::Purple,
CRGB::Red,
CRGB::Purple,
CRGB::Cyan,
CRGB::Purple,
CRGB::Red,
CRGB::Purple,
CRGB::Cyan,
CRGB::Purple,
/////////////////////
};
const TProgmemPalette16 Wide_p PROGMEM =
{ ////////////////////
CRGB::Red,
CRGB::Red,
CRGB::Red,
CRGB::Red,
CRGB::Purple,
CRGB::Purple,
CRGB::Purple,
CRGB::Purple,
CRGB::Cyan,
CRGB::Cyan,
CRGB::Cyan,
CRGB::Cyan,
CRGB::Purple,
CRGB::Purple,
CRGB::Purple,
CRGB::Purple,
/////////////////////
};