// from https://wokwi.com/arduino/projects/284742902582608392
/*"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`" "`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`*
U _ U _ - U - (_)(_)(_)(_)(_)| |_| |_ ___ ___ U _ U _ U - U -
/|\ /|\ | || || || || || __| _/ __|/ __| /|\ /|\ /|\
| || || || || |\ |_\ |_\__ \\__ \
|_||_||_||_||_| \__|\__|___/|___/
___| |__ _ __(_)(_)(_)(_)(_)___| |_ _ __ ___ __ _ __ _ __ _ __ _ ___ ___ | || || |
/ __| '_ \| '__| || || || || / __| __| '_ ` _ \ / _` / _` / _` / _` / __|/ __| | || || |
| (__| | | | | | || || || || \__ \ |_| | | | | | (_| | (_| | (_| | (_| \__ \\__ \ |_||_||_|
\___|_| |_|_| |_||_||_||_||_|___/\__|_| |_| |_|\__,_|\__,_|\__,_|\__,_|___/|___/ (_)(_)(_)
"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"
.-(_) U _ U _ U _ U _ - U -
/ _/ /|\ /|\ /|\
.-' \
/ '.
,-~--~-~-~-~-,
{__.._...__..._} o,(o),
o,888,o /\##" @ @ "##/\ ,88' `88,o
,(o)'(o),__ |(\` , (__) , `/)| __,88'o `(o)
,88' .8(_ \_____\_ '----' _/_____/ _)o). 8'F
(o)o (___)\ \ '-.__ __.-' / /(___) AS
88 (___)88o| '--' | 88(___) TL o o o
o8' (__)88,____/ FASTLEDFTW \___o,88(__) ED!((Elf Art by Joan Stark)... found On the interwebs - search for aasci art!)
_____________`(o),/__________________\_,(o)`_________________________o___________________o__________o____________o____________________________
o`88, ,88'
`(o), o ,(o)'o & THE ELVES HAVE BEEN BUSY DECORATING ALL YOUR CODES....... UH-OH!
o`88,_\(o)/_,88`
*/
//^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^//
// _ U _ - U - - U - - U - U _ U _ U _ U _ - U - - U -
// /|\ | /|\ /|\ /|\ /|\ |
//
// ANOTHER YEAR ANOTHER DEMO REEL!
// CHRISTMAS EDITION 2020
//
// DEMO SKETCH
// (Running on NanoV3 328p)
// (Compatible with the smaller 328p Arduinos - UNO, NANO, PRO MINI, PRO MICRO)
// & Runs best (visually) on WS2811 8mm String lights (For your Tree or as string lights!)
//
//
//,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,//
// - U - - U - - U - U _ U _ U _ U _ - U - - U -
// | /|\ /|\ /|\ /|\ |
//==========================================================================================================================================
//================== FastLED definitions
#include <FastLED.h>
#define DATA_PIN 6 // Which pin on the Arduino is connected to the leds?
//==========================================================================================================================================
//=================== Fairy style lights 8mm pixels
//------WS2811
#define LED_TYPE WS2812B
#define NUM_LEDS 50 // How many leds are attached to the Arduino?
#define VOLTS 5
#define MAX_MA 15000 // LIMITER - 500 is a safe start!- Can go up to 2000ma(safely)-(8mmPixel)
//(if you have sufficiant Amps to each string)
// set to 1300ma MAX if sharing power for two 5v strings (Before color washout and flicker occurs)
#define COLOR_CORRECTION Typical8mmPixel
//==========================================================================================================================================
//=================== Flat strip lights
//------WS2182B
//#define LED_TYPE WS2812B
//#define NUM_LEDS 144 // How many leds are attached to the Arduino?
//#define VOLTS 5
//#define MAX_MA 500
//#define COLOR_CORRECTION TypicalLEDStrip
//==========================================================================================================================================
//------TM1809/TM1812
//#define LED_TYPE TM1809 // MUST LINK (ARDUINO GND)--TO--(STRIP GND(-)) & (DATA)--TO--(DATA)
//#define NUM_LEDS 150 // How many leds are attached to the Arduino?
//#define VOLTS 5
//#define MAX_MA 500
//#define COLOR_CORRECTION TypicalLEDStrip
//==========================================================================================================================================
//=================== Led color order
//IF YOUR LED COLORS ARE IN THE WRONG ORDER GHANGE HERE:
//#define LED_COLOR_ORDER RGB
#define LED_COLOR_ORDER GRB
//#define LED_COLOR_ORDER RBG
//#define LED_COLOR_ORDER GBR
//#define LED_COLOR_ORDER BRG
//#define LED_COLOR_ORDER BGR
//==========================================================================================================================================
//======================== Variables for Glitter / Sparkle / SparkleBomb (These are set at comfortable levels but can be changed if needed)
#define GLITTER_AMOUNT 60 // white glitter slower paced than sparkle
//(10-90) (60=nice pace glitter)(90= too much glitter!!)
//(120= !!!SHOULD COME WITH A HEALTH WARNING OR SOMETHING?!!)
#define SPARKLE_AMOUNT 30 // white and yellow sparkles
// (30-70)(30= nice pace sparkles)(70= too many sparkles!!)
//(100= !!!SHOULD COME WITH A HEALTH WARNING OR SOMETHING?!!)
#define SPARKLEBOMB_AMOUNT 1 // Extra white and yellow sparkles (increment by 1)
//(1-6)(1= nice pace sparkles)(6= too many sparkles!!)
//(10= !!!SHOULD COME WITH A HEALTH WARNING OR SOMETHING?!!)
#define FADEOUT_SPEED 40 // speed of glitter and sparkle fade out (10=slow)(100=fast)
//==========================================================================================================================================
//======================= Variables for later patterns (not for changing)
CRGB leds[NUM_LEDS];
byte ledh[NUM_LEDS]; //used for sparkle
byte ledb[NUM_LEDS]; //used for sparkle
byte state = 1;
int index = 0; //-LED INDEX (0 to LED_COUNT-1)
byte thisbright = 255; // for later patterns (random burst, random march, rgb prop, candycane etc...)
byte thissat = 255; // for later patterns (random burst, random march, rgb prop, candycane etc...)
int thisdelay = 50; // for later patterns (random burst, random march, rgb prop, candycane etc...)
byte thisstep = 10; // for later patterns (random burst, random march, rgb prop, candycane etc...)
byte thishue = 0; // for later patterns (random burst, random march, rgb prop, candycane etc...)
byte thathue = 0; // for later patterns (random burst, random march, rgb prop, candycane etc...)
int sparkTest = 0; // sparkTest: variable used in the "sparkle & addPixieDust" sequence (a poor mans pixie dust!)
uint16_t ledsData[NUM_LEDS][4];//For colorTwinkle array to store color data and an extra value
uint16_t pick; //For colorTwinkles stores a temporary pixel number
//==========================================================================================================================================
//======================= Variables for TwinkleFox and DemoPatternList
#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0])) //for DemoPatternList
#define SECONDS_PER_PATTERN 30 // How often to change DemoPatternList
#define SECONDS_PER_PALETTE 30 // How often to change twinklefox color palettes.(USED FOR TWINKLEFOX TIMING)
#define COLOR_MATCH //!! use this to "group similar" colors ...
// << use this before #define to turn off (like this) //#define COLOR_MATCH
CRGBPalette16 gCurrentPalette; // for TwinkleFox
CRGBPalette16 gTargetPalette; // for TwinkleFox
uint8_t current_loop = 1; // use 1 for DEMO MODE and 2 for a single pattern (TwinkleFOX)(can be changed in loop)
uint8_t GLOBAL_BRIGHTNESS = 255; // BRIGHTNESS CAN BE CHANGED HERE. 255 = MAX (rolls over to 0 if you go higher)
uint8_t fps = 60; // Animation/Pattern speed (frames per second) 60 = Normal
uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current (for demoPatternList)
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
uint8_t ghue = 0; // slower rotating "base color" used by many of the patterns
//==========================================================================================================================================
//==========================================================================================================================================
//^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^//
// _ U _ - U - - U - - U - U _ U _ U _ U _ - U - - U -
// /|\ | /|\ /|\ /|\ /|\ |
//
//==========================================================================================================================================
void setup(){
Serial.begin(115200);
Serial.println("Effect:");
displayPatternName();
//========================= Initialize LEDS
FastLED.setMaxPowerInVoltsAndMilliamps( VOLTS, MAX_MA);
FastLED.addLeds<LED_TYPE,DATA_PIN,LED_COLOR_ORDER>(leds, NUM_LEDS).setCorrection( COLOR_CORRECTION );
FastLED.setBrightness(GLOBAL_BRIGHTNESS);
fadeToBlackBy( leds, NUM_LEDS,255);
FastLED.clear();
// for TwinkleFox
chooseNextColorPalette(gTargetPalette); // chooses next color palette to blend towards.
}
//==========================================================================================================================================
//========================= DEMO Pattern List
// List of patterns to cycle through. (all found in other tabs)
// GLITTER FOR ALL!! AAHHAHAHA!!! - change amount at top ^^ (...if you must!)
//typedef void (*DemoPatternList[])();
//DemoPatternList gPatterns = {
typedef void (*t_pPatternFunction)();
struct s_NamedPattern {
t_pPatternFunction pPatternFunction;
char* PatternName;
};
// define named pattern function
#define DNPF(name) {name, #name}
struct s_NamedPattern gNamedPatternList[] = {
#if defined(COLOR_MATCH) //change at top if not wanted.
//------------------------------ (COLOR_MATCH)
DNPF(fireStarter), // Yellow
DNPF(cometEffect), // Yellow
DNPF(YellowRipple),
DNPF(paletteFairyGold),
DNPF(YellowWhiteRipple),
DNPF(YellowRedRipple),
DNPF(paletteFairyLight),
DNPF(CandleTree4), // Yellow
DNPF(paletteCandle),
DNPF(random_march),
DNPF(YellowGreenWhiteDot),
DNPF(GreenGreenWhiteDot),
DNPF(Glimmer), // Green
DNPF(GreenRipple),
DNPF(paletteGreenPurple),
DNPF(paletteforest),
DNPF(paletteGreenWhite),
DNPF(GreenWhiteRipple),
DNPF(paletteGreenWhiteStripes),
DNPF(matrix4), // Light Green
DNPF(GreenBlueWhiteDot),
DNPF(cometChaserYELLOW_GREEN),
DNPF(CandleTree2), // Green
DNPF(matrix5), // Light Green
DNPF(paletteholly), // Green
DNPF(paletteRedGreenWhite),
DNPF(paletteRedGoldGreen),
DNPF(matrix1), // Green
DNPF(RedGreenWhiteDot),
DNPF(matrix3), // Red
DNPF(paletteRedGreenAlt),
DNPF(paletteRedGreenAltFlash),
DNPF(paletteTraditionalRedGreen), //(put after desired color for alt fill-in)
DNPF(paletteTraditionalRedGreenReverse), //(put after desired color for alt fill-in)
DNPF(paletteTraditionalRedGreenWhite),
DNPF(RedWhiteRipple),
DNPF(candycane), // Red/White
DNPF(paletteRedWhiteStripes), // Red/White
DNPF(palettelava), // Red/White
DNPF(RedRipple),
DNPF(CandleTree1), // Red
DNPF(matrix2), // Blue
DNPF(BlueRipple),
DNPF(CandleTree3), // Blue
DNPF(GreenBlueRipple),
DNPF(paletteocean), // Blue
DNPF(palettecloud), // Blue/White
DNPF(BlueWhiteRipple),
DNPF(paletteIce),
DNPF(paletteIce2),
DNPF(paletteSnow),
DNPF(paletteBlueWhite),
DNPF(IridescentSparkle),
DNPF(cometChaserAQUA),
DNPF(TurquoiseRipple),
DNPF(TurquoiseWhiteRipple),
DNPF(TurquoisePurpleRipple),
DNPF(matrix6),
DNPF(PurpleWhiteRipple), // Purple
DNPF(PurpleRipple), // Purple
DNPF(rgb_propeller), // R,G,B
DNPF(paletteRetroC9), // R,G,B,O
DNPF(random_burst),
DNPF(sinelon2), // Rainbow
DNPF(sinelon), // Rainbow
DNPF(cometEffectSinelonGHUE_SLOW_RAINBOW),
DNPF(cometChaserRAINBOW),
DNPF(pixieDustBackground1),
DNPF(fireStarter_YELLOW_GREEN),
DNPF(fireStarter_RAINBOW_PULSE_SLOW),
DNPF(fireStarterGHUE_RAINBOW),
DNPF(rainbow_pulse), // Rainbow
DNPF(rainbow_pulse2), // Rainbow
DNPF(paletterainbowstripe), // Rainbow
DNPF(bighalfrainbow), // Rainbow
DNPF(paletteparty), // Mixed
DNPF(paletterainbowstripe2), // Rainbow
DNPF(bigrainbow), // Rainbow
DNPF(paletterainbowstripe3), // Rainbow
DNPF(rainbow3), // Rainbow
DNPF(rainbow), // Rainbow
DNPF(miniRainbow), // Rainbow
DNPF(rainbowDots), // Rainbow
DNPF(TwinkleFox),
DNPF(meteorRain), // White
#endif
#if !defined(COLOR_MATCH)
//------------------------------ (ORIGINAL ORDER)
CandleTree1,
CandleTree2,
CandleTree3,
CandleTree4,
RedGreenWhiteDot,
GreenGreenWhiteDot,
GreenBlueWhiteDot,
YellowGreenWhiteDot,
cometEffectSinelonGHUE_SLOW_RAINBOW,
Glimmer,
GreenBlueRipple,
TurquoisePurpleRipple,
YellowRedRipple,
RedWhiteRipple,
GreenWhiteRipple,
BlueWhiteRipple,
PurpleWhiteRipple,
TurquoiseWhiteRipple,
YellowWhiteRipple,
RedRipple,
GreenRipple,
BlueRipple,
PurpleRipple,
TurquoiseRipple,
YellowRipple,
cometEffect,
cometChaserYELLOW_GREEN,
cometChaserAQUA,
cometChaserRAINBOW,
fireStarter,
fireStarter_YELLOW_GREEN,
pixieDustBackground1,
fireStarter_RAINBOW_PULSE_SLOW,
fireStarterGHUE_RAINBOW,
paletteRedWhiteStripes,
paletteRedGreenAlt,
paletteRedGreenAltFlash,
paletteholly,
paletteocean,
palettecloud,
palettelava,
paletteparty,
paletteRetroC9,
rgb_propeller,
candycane,
IridescentSparkle,
sinelon2,
sinelon,
rainbow_pulse,
rainbow_pulse2,
paletterainbowstripe,
paletterainbowstripe2,
paletterainbowstripe3,
bighalfrainbow,
bigrainbow,
rainbow,
miniRainbow,
rainbowDots,
rainbow3,
rainbow_loop,
paletteBlueWhite,
paletteGreenWhite,
paletteGreenWhiteStripes,
paletteforest,
paletteSnow,
paletteIce2,
paletteIce,
paletteTraditionalRedGreen, //(put after desired color for alt fill-in)
paletteTraditionalRedGreenReverse, //(put after desired color for alt fill-in)
paletteTraditionalRedGreenWhite,
paletteRedGreenWhite,
paletteGreenPurple,
paletteRedGoldGreen,
paletteFairyGold,
paletteFairyLight,
paletteCandle,
matrix1,
matrix2,
matrix3,
matrix4,
matrix5,
matrix6,
random_march,
random_burst,
TwinkleFox,
meteorRain,
#endif
};
t_pPatternFunction gCurrentPatternFunction = gNamedPatternList[gCurrentPatternNumber].pPatternFunction;
// Note: TwinkleFox will NOT run its full timing here (SECONDS_PER_PALETTE)
// as (SECONDS_PER_PATTERN) is in control of the looptime.
// the effect still looks nice as a random palette happens each time its called from here<<<
// (SECONDS_PER_PALETTE) works normal if "TwinkleFox();" is on a seperate button as its own loop.-
// or if the overall (SECONDS_PER_PATTERN) is longer than: TwinkleFox list of palettes x (SECONDS_PER_PALETTE)
// NOTE: to use the following cut or copy them into the list you are using above (COLOR_MATCH or non ORIGINAL_ORDER list)
// also you could comment out all of the patterns you dont like in the lists above to make a shorter list maybe?.
//SPARE PATTERNS:
//colortwinkles,// this one will run from twinklefox timings (EVERY_N_MILLIS) & palette list (ActivePaletteList)
//solidGreenTwinkles, //Nice but a bit too sparcely lit
//solidGreen2Twinkles, // same
//solidGreen3Twinkles, // same
//IridescentTwinkles, // same
//classicTwinkles, // same
//cloudTwinkles, // same
//rainbowTwinkles, // same
//snowTwinkles, // same
//incandescentTwinkles, //Nice but a bit too sparcely lit
//chaserfadeRedGreenWhiteDot, // old one
//colorwipeRedGreen, // old one
//SilentNightRiderRedGreen, // old one
//NewKITT_ALL, // old one
// NOTE: you can put addSparkle(); or addSparklebomb(); or addGreenSparkle(); instead of addGlitter();
//justGlitter, // same(These were made as an example to show the different types of glitter)
//justSparkle, // same(These were made as an example to show the different types of glitter)
//justSparkleOldSchool1, // same(These were made as an example to show the different types of glitter)
//justSparkleOldSchool2, // same(These were made as an example to show the different types of glitter)
//GreenSparkle, // same(These were made as an example to show the different types of glitter)
//RedSparkle, // same(These were made as an example to show the different types of glitter)
//BlueSparkle, // same(These were made as an example to show the different types of glitter)
//rgbSparkle, // a bit too flashy for room decorations fine for ornaments (^"""""""""""""""^)
//confetti, // a bit too flashy for room decorations fine for ornaments
//juggle, // Too quick for string lights that are at close proximity to you // better for strips.
//sinelonWhite, // ok but too Bland
//CandleON, //messes with Brightness and color temp on exit... to be worked on for 2021!
//BlacklightON, //messes with Brightness and color temp on exit... to be worked on for 2021!
// NOTE: not ALL of these will fit on a 328p so i have only selected the best looking ones,
// If you have a larger memory board you could add ALL of these back into the demolist.
//==========================================================================================================================================
//,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,//
// - U - - U - - U - U _ U _ U _ U _ - U - - U -
// | /|\ /|\ /|\ /|\ |
//
//==========================================================================================================================================
// ------------------------------ Loop
void loop(){
EVERY_N_MILLISECONDS( 1 ) { gHue++; } // FAST - cycle the "base color" through the rainbow
EVERY_N_SECONDS( 1 ) { ghue++; } // SLOW - cycle the "base color" through the rainbow
EVERY_N_SECONDS( SECONDS_PER_PALETTE ) { chooseNextColorPalette( gTargetPalette );} // change palettes periodically
EVERY_N_MILLISECONDS( 20 ) { nblendPaletteTowardPalette( gCurrentPalette, gTargetPalette, 12);} // blend current palette to next palette
switch (current_loop){
case 1:
{
//gPatterns[gCurrentPatternNumber](); // Call the current pattern function once, updating the 'leds' array
gCurrentPatternFunction();
EVERY_N_SECONDS( SECONDS_PER_PATTERN ) { nextPattern();}
break;
}
case 2:
{
TwinkleFox(); // can be changed to any pattern you want... or maybe add more cases based off this example?
break;
}
}
// send the 'leds' array out to the actual LED strip
FastLED.show();
// insert a delay to keep the framerate modest
FastLED.delay(1000/fps);
}
// Loopy stuff >> ENDS HERE <<
//==========================================================================================================================================
//^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^//
// _ U _ - U - - U - - U - U _ U _ U _ U _ - U - - U -
// /|\ | /|\ /|\ /|\ /|\ |
//==========================================================================================================================================
//============================= Choose next pattern from DemoPatternList
void nextPattern()
{
// add one to the current pattern number, and wrap around to top of pattern list if we get to the end.
//gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns);
gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE(gNamedPatternList);
gCurrentPatternFunction = gNamedPatternList[gCurrentPatternNumber].pPatternFunction;
displayPatternName();
}
void displayPatternName()
{
Serial.print(gCurrentPatternNumber + 1);
Serial.print("/");
Serial.print(ARRAY_SIZE(gNamedPatternList));
Serial.print(": ");
Serial.println(gNamedPatternList[gCurrentPatternNumber].PatternName);
}
//FIN*
//==========================================================================================================================================
//^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^`"`^-.,___,.-^//
// _ U _ - U - - U - - U - U _ U _ U _ U _ - U - - U -
// /|\ | /|\ /|\ /|\ /|\ |
//
//==========================================================================================================================================
/*
Art by Shanaka Dias
|,\/,| |[_' |[_]) |[_]) \\//
||\/|| |[_, ||'\, ||'\, ||
___ __ __ ____ __ __ ____ _ _ __ __
// ' |[_]| |[_]) || ((_' '||' |,\/,| //\\ ((_'
\\_, |[']| ||'\, || ,_)) || ||\/|| //``\\ ,_))
,;7,
_ ||:|,
_,---,_ )\' '|
.'_.-.,_ '. ',') j
/,' ___} \ _/ /
., ,1 .'' =\ _.''. ,`';_ |
.' \ (.'T ~, (' ) ',.' / ';',
\ .\(\O/)_. \ ( _Z-'`>--, .'', ;
\ | I _|._>;--'`,-j-' ; ', .'
__\_| _.'.-7 ) `'-' " ( ;'
.'.'_.'|.' .' \ ',_ .'\ /
| | |.' / \ \ l \ /
| _.-' / '. ('._ _ ,.' \i
,--' ---' / k _.-,.-|__L, '-' ' () ;
'._ ( '; ( _-} |
/ ' \ ; ',.__; () /
/ | ; ; ___._._____.: :-j
| \,__',-' ____: :_____.: :-\
| F : . ' ' , L
', J | ; j |
\ | | L | J
; .-F | ; J L
\___,---' J'--: j,---,___ |_ |
| |'--' L '--| '-'|
'.,L |----.__ j.__.'
| '----' |, '-' }
j / ('-----';
{ "---'--;' } |
| | '.----,.'
',.__.__.' |=, _/
| / | '.
|'= -x L___ '--,
L __\ '-----'
'.____)
*/
// Thankyou Daniel Garcia for the gift that keeps on giving ...Peace Love and Light Brother.
// ---------------- //
///////////////////////////////// ALL PALETTES ////////////////////////////////////////////
// ---------------- //
//Here are TwinkleFox palette colors by Mark Kriegsman, Custom palettes & built in FastLED palette colors
//(I TOLD THE ELVES NOT TO DECORATE HERE) - (FOR EASY COPYING TO YOUR OWN SKETCHES)
//======================================================================
// For Green Ripple
const TProgmemRGBPalette16 RippleGreen_p FL_PROGMEM =
{ CRGB::Green,CRGB::Green,CRGB::Black, CRGB::Black,
CRGB::Black, CRGB::Green, CRGB::Black, CRGB::Black,
CRGB::Green,CRGB::Black, CRGB::Green, CRGB::Black,
CRGB::Black, CRGB::Black, CRGB::Green, CRGB::Black };
//======================================================================
// For Red Ripple
const TProgmemRGBPalette16 RippleRed_p FL_PROGMEM =
{ CRGB::Red,CRGB::Red,CRGB::Black, CRGB::Black,
CRGB::Black, CRGB::Red, CRGB::Black, CRGB::Black,
CRGB::Red,CRGB::Black, CRGB::Red, CRGB::Black,
CRGB::Black, CRGB::Black, CRGB::Red, CRGB::Black };
//======================================================================
// For Blue Ripple
const TProgmemRGBPalette16 RippleBlue_p FL_PROGMEM =
{ CRGB::Blue,CRGB::Blue,CRGB::Black, CRGB::Black,
CRGB::Black, CRGB::Blue, CRGB::Black, CRGB::Black,
CRGB::Blue,CRGB::Black, CRGB::Blue, CRGB::Black,
CRGB::Black, CRGB::Black, CRGB::Blue, CRGB::Black };
//======================================================================
// For Yellow Ripple
const TProgmemRGBPalette16 RippleYellow_p FL_PROGMEM =
{ CRGB::Yellow,CRGB::Yellow,CRGB::Black, CRGB::Black,
CRGB::Black, CRGB::Yellow, CRGB::Black, CRGB::Black,
CRGB::Yellow,CRGB::Black, CRGB::Yellow, CRGB::Black,
CRGB::Black, CRGB::Black, CRGB::Yellow, CRGB::Black };
//======================================================================
// For Purple Ripple
const TProgmemRGBPalette16 RipplePurple_p FL_PROGMEM =
{ CRGB::Purple,CRGB::Purple,CRGB::Black, CRGB::Black,
CRGB::Black, CRGB::Purple, CRGB::Black, CRGB::Black,
CRGB::Purple,CRGB::Black, CRGB::Purple, CRGB::Black,
CRGB::Black, CRGB::Black, CRGB::Purple, CRGB::Black };
//======================================================================
// For Turquoise Ripple
const TProgmemRGBPalette16 RippleTurquoise_p FL_PROGMEM =
{ CRGB::Cyan, CRGB::Cyan, CRGB::Black, CRGB::Black,
CRGB::Black, CRGB::Cyan, CRGB::Black, CRGB::Black,
CRGB::Cyan, CRGB::Black, CRGB::Cyan, CRGB::Black,
CRGB::Black, CRGB::Black, CRGB::Cyan, CRGB::Black };
//======================================================================
// For White Ripple
const TProgmemRGBPalette16 RippleWhite_p FL_PROGMEM =
{ CRGB::White,CRGB::White,CRGB::Black, CRGB::Black,
CRGB::Black, CRGB::White, CRGB::Black, CRGB::Black,
CRGB::White,CRGB::Black, CRGB::White, CRGB::Black,
CRGB::Black, CRGB::Black, CRGB::White, CRGB::Black };
//======================================================================
// A mostly red palette with green accents and white trim.
const TProgmemRGBPalette16 RedGreenWhite_p FL_PROGMEM =
{ CRGB::White, CRGB::White, CRGB::Red, CRGB::Red,
CRGB::Green, CRGB::Green, CRGB::Green, CRGB::Green,
CRGB::Red, CRGB::Red, CRGB::Red, CRGB::Green,
CRGB::Green, CRGB::Green, CRGB::Green, CRGB::Green };
//======================================================================
// A mostly (dark) green palette with red berries.
#define Holly_Green 0x00580c
#define Holly_Red 0xB00402
const TProgmemRGBPalette16 Holly_p FL_PROGMEM =
{ Holly_Green, Holly_Green, Holly_Green, Holly_Green,
Holly_Green, Holly_Green, Holly_Green, Holly_Green,
Holly_Green, Holly_Green, Holly_Green, Holly_Green,
Holly_Green, Holly_Green, Holly_Green, Holly_Red
};
//======================================================================
// A red and white striped palette
const TProgmemRGBPalette16 RedWhiteStripes_p FL_PROGMEM =
{ CRGB::White, CRGB::White, CRGB::White, CRGB::White,
CRGB::Red, CRGB::Red, CRGB::Red, CRGB::Red,
CRGB::White, CRGB::White, CRGB::White, CRGB::White,
CRGB::Red, CRGB::Red, CRGB::Red, CRGB::Red };
//======================================================================
// A green and Purple palette
const TProgmemRGBPalette16 GreenPurple_p FL_PROGMEM =
{ CRGB::Lime, CRGB::Lime, CRGB::DarkGreen, CRGB::Purple,
CRGB::LightGreen,CRGB::LawnGreen, CRGB::DarkGreen, CRGB::Purple,
CRGB::Lime, CRGB::Lime, CRGB::DarkGreen, CRGB::Purple,
CRGB::LightGreen,CRGB::LawnGreen, CRGB::DarkGreen, CRGB::Purple,};
//======================================================================
// A red, gold, green, white palette
const TProgmemRGBPalette16 RedGoldGreen_p FL_PROGMEM =
{ CRGB::Red, CRGB::Gold, CRGB::Green, CRGB::Silver,
CRGB::Red, CRGB::Gold, CRGB::Green, CRGB::White,
CRGB::Red, CRGB::Gold, CRGB::Green, CRGB::Silver,
CRGB::Red, CRGB::Gold, CRGB::Green, CRGB::White};
//======================================================================
// A Yellow, gold, Silver, white palette
const TProgmemRGBPalette16 FairyGold_p FL_PROGMEM =
{ CRGB::Gold, CRGB::Gold, CRGB::FairyLightNCC, CRGB::Silver,
CRGB::Gold, CRGB::FairyLight, CRGB::Gold, CRGB::Grey,
CRGB::FairyLightNCC, CRGB::Gold, CRGB::FairyLightNCC, CRGB::Silver,
CRGB::Gold, CRGB::FairyLight, CRGB::Gold, CRGB::Grey,};
//======================================================================
// A green and white striped palette
// "CRGB::Silver" is used as white to keep the brightness more uniform.
const TProgmemRGBPalette16 GreenWhiteStripes_p FL_PROGMEM =
{ CRGB::Silver, CRGB::Silver, CRGB::Silver, CRGB::Silver,
CRGB::Green,CRGB::Green,CRGB::Green,CRGB::Green,
CRGB::Silver, CRGB::Silver, CRGB::Silver, CRGB::Silver,
CRGB::Green,CRGB::Green,CRGB::Green,CRGB::Green };
//======================================================================
// A mostly light blue palette with white accents.
const TProgmemRGBPalette16 BlueWhite_p FL_PROGMEM =
{ CRGB::LightBlue, CRGB::LightBlue, CRGB::LightBlue, CRGB::LightBlue,
CRGB::LightBlue, CRGB::LightBlue, CRGB::LightBlue, CRGB::LightBlue,
CRGB::LightBlue, CRGB::Gray, CRGB::White, CRGB::Silver,
CRGB::CornflowerBlue, CRGB::Gray, CRGB::White, CRGB::Silver };
//======================================================================
// A mostly light green palette with white accents.
const TProgmemRGBPalette16 GreenWhite_p FL_PROGMEM =
{ CRGB::LightGreen, CRGB::LightGreen, CRGB::LightGreen, CRGB::LightGreen,
CRGB::LightGreen, CRGB::LightGreen, CRGB::LightGreen, CRGB::LightGreen,
CRGB::LightGreen, CRGB::Gray, CRGB::White, CRGB::Silver,
CRGB::Lime, CRGB::Gray, CRGB::White, CRGB::Silver };
//======================================================================
// A pure "fairy light" palette with some brightness variations
#define HALFFAIRY ((CRGB::FairyLight & 0xFEFEFE) / 2)
#define QUARTERFAIRY ((CRGB::FairyLight & 0xFCFCFC) / 4)
const TProgmemRGBPalette16 FairyLight_p FL_PROGMEM =
{ CRGB::FairyLightNCC, CRGB::FairyLightNCC, HALFFAIRY, CRGB::FairyLightNCC,
CRGB::FairyLightNCC, CRGB::FairyLightNCC, CRGB::FairyLightNCC, CRGB::FairyLightNCC,
CRGB::FairyLightNCC, HALFFAIRY, CRGB::FairyLightNCC, CRGB::FairyLightNCC,
QUARTERFAIRY , CRGB::FairyLightNCC, CRGB::FairyLightNCC, CRGB::FairyLightNCC };
//======================================================================
// A palette of soft snowflakes with the occasional bright one
const TProgmemRGBPalette16 Snow_p FL_PROGMEM =
{ 0x304048, 0x304048, 0x304048, 0x304048,
0x304048, 0x304048, 0x304048, 0x304048,
0x304048, 0x304048, 0x304048, 0x304048,
0x304048, 0x304048, 0x304048, 0xE0F0FF };
//======================================================================
// A palette reminiscent of large 'old-school' C9-size tree lights
// in the five classic colors: red, orange, green, blue, and white.
#define C9_Red 0xB80400
#define C9_Orange 0x902C02
#define C9_Green 0x046002
#define C9_Blue 0x070758
#define C9_White 0x606820
const TProgmemRGBPalette16 RetroC9_p FL_PROGMEM =
{ C9_Red, C9_Red, C9_Red, C9_Red,
C9_Orange, C9_Orange, C9_Orange, C9_Orange,
C9_Green, C9_Green, C9_Green, C9_Green,
C9_Blue, C9_Blue, C9_Blue,
C9_White
};
//======================================================================
// A cold, icy pale blue palette
#define Ice_Blue1 0x0C1040
#define Ice_Blue2 0x182080
#define Ice_Blue3 0x5080C0
const TProgmemRGBPalette16 Ice_p FL_PROGMEM =
{
Ice_Blue3, Ice_Blue3, Ice_Blue3, Ice_Blue3,
Ice_Blue3, 0x304048, Ice_Blue3, Ice_Blue3,
Ice_Blue3, Ice_Blue3, Ice_Blue3, Ice_Blue3,
Ice_Blue1, Ice_Blue3, Ice_Blue3, Ice_Blue3
};
//======================================================================
// A green & pale blue palette
#define Ice_Blue1 0x0C1040
#define Ice_Blue2 0x182080
#define Ice_Blue3 0x5080C0
#define Holly_Green 0x00580c
const TProgmemRGBPalette16 Ice2_p FL_PROGMEM =
{
Holly_Green, Holly_Green, Ice_Blue3, Holly_Green,
Ice_Blue3, Ice_Blue3, Ice_Blue3, Ice_Blue3,
Ice_Blue3, Ice_Blue3, Ice_Blue3, Ice_Blue3,
Ice_Blue3, Ice_Blue3, Ice_Blue3, Ice_Blue3
};
//======================================================================
// icy BlackLight
#define BlackLight 0xA700FF
const TProgmemRGBPalette16 PALBlacklight_p FL_PROGMEM =
{
0x304048, BlackLight, BlackLight, BlackLight,
BlackLight, BlackLight, BlackLight, BlackLight,
BlackLight, BlackLight, BlackLight, BlackLight,
BlackLight, BlackLight, BlackLight, BlackLight
};
//======================================================================
// A Warm Candle (or Bonfire!)
#define Candleflame 0xFF9329
const TProgmemRGBPalette16 PALCandle_p FL_PROGMEM =
{
CRGB::FairyLightNCC,CRGB::FairyLightNCC,CRGB::White,Candleflame,
Candleflame,Candleflame,Candleflame,CRGB::FairyLightNCC,
Candleflame,Candleflame,Candleflame,Candleflame,
Candleflame,Candleflame,Candleflame,Candleflame,
};
//======================================================================
// A traditional palette with red and green (alternating).
const TProgmemRGBPalette16 TraditionalRedGreen_p FL_PROGMEM =
{ CRGB::Red, CRGB::Green, CRGB::Red, CRGB::Green,
CRGB::Red, CRGB::Green, CRGB::Red, CRGB::Green,
CRGB::Red, CRGB::Green, CRGB::Red, CRGB::Green,
CRGB::Red, CRGB::Green, CRGB::Red, CRGB::Green };
//======================================================================
// A traditional palette with red, green and white (alternating).
// "CRGB::Silver" is used as white to keep the brightness more uniform.
const TProgmemRGBPalette16 TraditionalRedGreenWhite_p FL_PROGMEM =
{ CRGB::Red, CRGB::Red, CRGB::Silver, CRGB::Red,
CRGB::Green, CRGB::Silver, CRGB::Green, CRGB::Green,
CRGB::Silver, CRGB::Red, CRGB::Green, CRGB::Silver,
CRGB::Red, CRGB::Green, CRGB::Silver, CRGB::Green };
//======================================================================
const TProgmemRGBPalette16 SolidColorsGreens_p FL_PROGMEM =
{
CRGB::LightGreen,CRGB::LightGreen,CRGB::Green,CRGB::Green,
CRGB::Green,CRGB::Green,CRGB::Green,CRGB::Green,
CRGB::Green,CRGB::LightGreen,CRGB::Green,CRGB::LawnGreen,
CRGB::Green,CRGB::LawnGreen,CRGB::Green,CRGB::Green };
//======================================================================
const TProgmemRGBPalette16 SolidColorsGreens2_p FL_PROGMEM =
{
CRGB::SeaGreen,CRGB::SeaGreen,CRGB::Green,CRGB::Green,
CRGB::SpringGreen,CRGB::SpringGreen,CRGB::SpringGreen,CRGB::SpringGreen,
CRGB::Green,CRGB::SeaGreen,CRGB::Green,CRGB::LawnGreen,
CRGB::Green,CRGB::LawnGreen,CRGB::SpringGreen,CRGB::SpringGreen};
//======================================================================
const TProgmemRGBPalette16 SolidColorsGreens3_p FL_PROGMEM =
{
CRGB::Olive,CRGB::Olive,CRGB::OliveDrab,CRGB::OliveDrab,
CRGB::OliveDrab,CRGB::OliveDrab,CRGB::ForestGreen,CRGB::ForestGreen,
CRGB::ForestGreen,CRGB::ForestGreen,CRGB::Olive,CRGB::Olive,
CRGB::ForestGreen,CRGB::ForestGreen,CRGB::OliveDrab,CRGB::OliveDrab};
//======================================================================
const TProgmemRGBPalette16 Iridescent_p FL_PROGMEM =
{
CRGB::Cyan,CRGB::Cyan,CRGB::Indigo,CRGB::PaleTurquoise,
CRGB::MediumTurquoise,CRGB::Cyan,CRGB::PaleTurquoise,CRGB::CornflowerBlue,
CRGB::Aqua,CRGB::MediumTurquoise,CRGB::Aqua,CRGB::PaleTurquoise,
CRGB::SpringGreen,CRGB::Cyan,CRGB::Indigo,CRGB::MediumTurquoise};
//======================================================================
// Add or remove palette names from this list to control which color
// palettes are used, and in what order.
const TProgmemRGBPalette16* ActivePaletteList[] = {
&Iridescent_p,
&SolidColorsGreens_p,
&SolidColorsGreens2_p,
&SolidColorsGreens3_p,
&FairyLight_p,
&PALCandle_p,
&Ice_p,
&Ice2_p,
&BlueWhite_p,
&RedWhiteStripes_p,
&GreenWhiteStripes_p,
&RedGreenWhite_p,
&Holly_p,
&ForestColors_p,
&FairyGold_p,
&TraditionalRedGreenWhite_p,
&GreenWhite_p,
&GreenPurple_p,
&TraditionalRedGreen_p,
&RedGoldGreen_p,
&RetroC9_p,
// &LavaColors_p, //goes too dim
// &Snow_p, //goes too dim
};
// Advance to the next color palette in the list (above).
void chooseNextColorPalette( CRGBPalette16& pal)
{
const uint8_t numberOfPalettes = sizeof(ActivePaletteList) / sizeof(ActivePaletteList[0]);
static uint8_t whichPalette = -1;
whichPalette = addmod8( whichPalette, 1, numberOfPalettes);
pal = *(ActivePaletteList[whichPalette]);
}
//*TwinkleFox palette End*
// ColorTwinkles by Mark Kriegsman: https://gist.github.com/kriegsman/5408ecd397744ba0393e
uint8_t solidGreenTwinkles()
{
gCurrentPalette = SolidColorsGreens_p;
colortwinkles();
}
uint8_t solidGreen2Twinkles()
{
gCurrentPalette = SolidColorsGreens2_p;
colortwinkles();
}
uint8_t solidGreen3Twinkles()
{
gCurrentPalette = SolidColorsGreens3_p;
colortwinkles();
}
uint8_t IridescentTwinkles()
{
gCurrentPalette = Iridescent_p;
colortwinkles();
}
uint8_t classicTwinkles()
{
gCurrentPalette = RetroC9_p;
colortwinkles();
}
uint8_t cloudTwinkles()
{
gCurrentPalette = CloudColors_p; // Blues and whites!
colortwinkles();
}
uint8_t rainbowTwinkles()
{
gCurrentPalette = RainbowColors_p;
colortwinkles();
}
uint8_t snowTwinkles()
{
CRGB w(85,85,85), W(CRGB::White);
gCurrentPalette = CRGBPalette16( W,W,W,W, w,w,w,w, w,w,w,w, w,w,w,w );
colortwinkles();
}
uint8_t incandescentTwinkles()
{
CRGB l(0xE1A024);
gCurrentPalette = CRGBPalette16( l,l,l,l, l,l,l,l, l,l,l,l, l,l,l,l );
colortwinkles();
}
#define STARTING_BRIGHTNESS GLOBAL_BRIGHTNESS/2
#define FADE_IN_SPEED 20
#define FADE_OUT_SPEED 10
#define DENSITY 3
enum { GETTING_DARKER = 0, GETTING_BRIGHTER = 1 };
void colortwinkles()
{
// Make each pixel brighter or darker, depending on
// its 'direction' flag.
brightenOrDarkenEachPixel( FADE_IN_SPEED, FADE_OUT_SPEED);
// Now consider adding a new random twinkle
if( random8() > DENSITY ) {
int pos = random16(NUM_LEDS);
if( !leds[pos]) {
leds[pos] = ColorFromPalette(gCurrentPalette, random8(), STARTING_BRIGHTNESS, LINEARBLEND);
setPixelDirection(pos, GETTING_BRIGHTER);
}
}
}
void brightenOrDarkenEachPixel( fract8 fadeUpAmount, fract8 fadeDownAmount)
{
for( uint16_t i = 0; i < NUM_LEDS; i++) {
if( getPixelDirection(i) == GETTING_DARKER) {
// This pixel is getting darker
leds[i] = makeDarker( leds[i], fadeDownAmount);
} else {
// This pixel is getting brighter
leds[i] = makeBrighter( leds[i], fadeUpAmount);
// now check to see if we've maxxed out the brightness
if( leds[i].r == 255 || leds[i].g == 255 || leds[i].b == 255) {
// if so, turn around and start getting darker
setPixelDirection(i, GETTING_DARKER);
}
}
}
}
CRGB makeBrighter( const CRGB& color, fract8 howMuchBrighter)
{
CRGB incrementalColor = color;
incrementalColor.nscale8( howMuchBrighter);
return color + incrementalColor;
}
CRGB makeDarker( const CRGB& color, fract8 howMuchDarker)
{
CRGB newcolor = color;
newcolor.nscale8( 255 - howMuchDarker);
return newcolor;
}
// Compact implementation of
// the directionFlags array, using just one BIT of RAM
// per pixel. This requires a bunch of bit wrangling,
// but conserves precious RAM. The cost is a few
// cycles and about 100 bytes of flash program memory.
uint8_t directionFlags[ (NUM_LEDS+7) / 8];
bool getPixelDirection( uint16_t i)
{
uint16_t index = i / 8;
uint8_t bitNum = i & 0x07;
uint8_t andMask = 1 << bitNum;
return (directionFlags[index] & andMask) != 0;
}
void setPixelDirection( uint16_t i, bool dir)
{
uint16_t index = i / 8;
uint8_t bitNum = i & 0x07;
uint8_t orMask = 1 << bitNum;
uint8_t andMask = 255 - orMask;
uint8_t value = directionFlags[index] & andMask;
if( dir ) {
value += orMask;
}
directionFlags[index] = value;
}
//===================================================================================================================================================
//======================================================================
// Normal palettes to use as a pattern. vvvvv below this point vvvvv
//======================================================================
void palettecloud()
{
// FastLED.setBrightness(GLOBAL_BRIGHTNESS);// Set brightness
CRGBPalette16 palette = CloudColors_p; LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteocean()
{
CRGBPalette16 palette = OceanColors_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteforest()
{
CRGBPalette16 palette = ForestColors_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void palettelava()
{
CRGBPalette16 palette = LavaColors_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i),GLOBAL_BRIGHTNESS);
// addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteparty()
{
CRGBPalette16 palette = PartyColors_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletterainbowstripe()
{
CRGBPalette16 palette = RainbowStripeColors_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*1),GLOBAL_BRIGHTNESS);
addGlitter(SPARKLEBOMB_AMOUNT);
}
FastLED.delay(30);
}
//======================================================================
void paletterainbowstripe2()
{
CRGBPalette16 palette = RainbowStripeColors_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addGlitter(SPARKLEBOMB_AMOUNT);
}
FastLED.delay(30);
}
//======================================================================
void paletterainbowstripe3()
{
CRGBPalette16 palette = RainbowStripeColors_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*3),GLOBAL_BRIGHTNESS);
addGlitter(SPARKLEBOMB_AMOUNT);
}
FastLED.delay(30);
}
//======================================================================
void paletteholly()
{
CRGBPalette16 palette = Holly_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT/2);
}
//======================================================================
void paletteFairyLight()
{
// FastLED.setBrightness(GLOBAL_BRIGHTNESS-10);// Set brightness
CRGBPalette16 palette = FairyLight_p; LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void paletteRetroC9()
{
CRGBPalette16 palette = RetroC9_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*4),GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void paletteFairyGold()
{
// FastLED.setBrightness((GLOBAL_BRIGHTNESS)-10);// Set brightness
CRGBPalette16 palette = FairyGold_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*1),GLOBAL_BRIGHTNESS);
addGlitter(GLITTER_AMOUNT/4);
}
FastLED.delay(60);
}
//======================================================================
void paletteGreenPurple()
{
CRGBPalette16 palette = GreenPurple_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteRedGoldGreen()
{
CRGBPalette16 palette = RedGoldGreen_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
FastLED.delay(30);
}
//======================================================================
void paletteRedWhiteStripes()
{
CRGBPalette16 palette = RedWhiteStripes_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteGreenWhiteStripes()
{
CRGBPalette16 palette = GreenWhiteStripes_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteRedGreenWhite()
{
CRGBPalette16 palette = RedGreenWhite_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteSnow()
{
CRGBPalette16 palette = Snow_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
// addSparkle(SPARKLEBOMB_AMOUNT);
}
addIridescentSparkle(GLITTER_AMOUNT);
}
//======================================================================
void paletteBlueWhite()
{
CRGBPalette16 palette = BlueWhite_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void paletteGreenWhite()
{
CRGBPalette16 palette = GreenWhite_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void paletteIce()
{
CRGBPalette16 palette = Ice_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
}
addIridescentSparkle(GLITTER_AMOUNT);
}
//======================================================================
void paletteIce2()
{
CRGBPalette16 palette = Ice2_p;LINEARBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
}
addIridescentSparkle(GLITTER_AMOUNT);
}
//======================================================================
void paletteTraditionalRedGreenWhite()
{
CRGBPalette16 palette = TraditionalRedGreenWhite_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void paletteTraditionalRedGreen()
{
CRGBPalette16 palette = TraditionalRedGreen_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue-(i++),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
void paletteTraditionalRedGreenReverse()
{
CRGBPalette16 palette = TraditionalRedGreen_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i++),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
void paletteRedGreenAlt()
{
CRGBPalette16 palette = TraditionalRedGreen_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette,gHue=(i*8),GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void paletteRedGreenAltFlash()
{
CRGBPalette16 palette = TraditionalRedGreen_p;NOBLEND;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
// delay(1);
}
}
//======================================================================
void paletteBlacklight()
{
CRGBPalette16 palette = PALBlacklight_p;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
}
//======================================================================
void paletteCandle()
{
// FastLED.setBrightness(GLOBAL_BRIGHTNESS-10);// Set brightness
CRGBPalette16 palette = PALCandle_p;
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2),GLOBAL_BRIGHTNESS);
addSparkle(SPARKLEBOMB_AMOUNT);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
// USED BY CANDLE TREE
void addCandles( fract8 chanceOfSparkle) // like Glitter but flicker instead
{
int i=0;
for(int i; i<NUM_LEDS; i+=5){ // put a "candle" every 5 and now [i] is controlling every 5 only
// leds[i] += Candleflame; // solid candle background
CRGBPalette16 palette = FairyLight_p;LINEARBLEND; // moving backgrounds
// CRGBPalette16 palette = PALCandle_p;
// CRGBPalette16 palette = HeatColors_p;
// CRGBPalette16 palette = LavaColors_p;
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
if( random8() < chanceOfSparkle) { // dimming/flicker
leds[i] += CRGB::Maroon;} // (Maroon)
}
FastLED.delay(random(0,40));
}
//======================================================================
// USED BY GREEN RIPPLE
void addGreenRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleGreen_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleGreen_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY RED RIPPLE
void addRedRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleRed_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleRed_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY BLUE RIPPLE
void addBlueRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleBlue_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleBlue_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY YELLOW RIPPLE
void addYellowRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleYellow_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleYellow_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY PURPLE RIPPLE
void addPurpleRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RipplePurple_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RipplePurple_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY TURQUOISE RIPPLE
void addTurquoiseRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleTurquoise_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleTurquoise_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY RED WHITE RIPPLE
void addRedWhiteRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleRed_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleWhite_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY GREEN WHITE RIPPLE
void addGreenWhiteRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleGreen_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleWhite_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY BLUE WHITE RIPPLE
void addBlueWhiteRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleBlue_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleWhite_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY PURPLE WHITE RIPPLE
void addPurpleWhiteRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RipplePurple_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleWhite_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY YELLOW WHITE RIPPLE
void addYellowWhiteRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleYellow_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleWhite_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY TURQUOISE WHITE RIPPLE
void addTurquoiseWhiteRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleTurquoise_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleWhite_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY GREEN BLUE RIPPLE
void addGreenBlueRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleGreen_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleBlue_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY TURQUOISE PURPLE RIPPLE
void addTurquoisePurpleRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleTurquoise_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RipplePurple_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
// USED BY YELLOW RED RIPPLE
void addYellowRedRipple( fract8 chanceOfSparkle) {
if( random8() < chanceOfSparkle) { //Glitter
leds[random16(0,NUM_LEDS)] += CRGB::White;}
int i=0;
for(int i; i<NUM_LEDS; i++){
CRGBPalette16 palette = RippleYellow_p;LINEARBLEND; // moving backgrounds
leds[i] += ColorFromPalette(palette,gHue+(i*8),GLOBAL_BRIGHTNESS);
}
int j=0;
for(int j; j<NUM_LEDS; j++){
CRGBPalette16 palette = RippleRed_p;LINEARBLEND; // moving backgrounds
leds[j] += ColorFromPalette(palette,gHue-(j*8),GLOBAL_BRIGHTNESS);
}
}
//======================================================================
void BlacklightON() // messes up color temps on exit :( shame...
{
FastLED.setTemperature(BlackLightFluorescent); // culprit... You need to reset color temp back to normal on exit
fill_solid(leds,NUM_LEDS,(BlackLightFluorescent));//fill strip
}
//======================================================================
void CandleON() // messes up color temps on exit :(
{
FastLED.setTemperature(Candle); // culprit... You need to reset color temp back to normal on exit
fill_solid(leds,NUM_LEDS,(Candle));//fill strip
FastLED.delay(50);
addSparkle(GLITTER_AMOUNT);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void clear_leds()
{
fadeToBlackBy( leds, NUM_LEDS,120);
FastLED.clear();
}
//======================================================================
//*Palette list End*
// ---------------- //
/////////////////////////////////// TWINKLEFOX ////////////////////////////////////////////
// ---------------- //
//=========================================================================================================
// The following code is from Mark Kriegsman. ( Twinkle-Lights 2015 )
// G+: https://plus.google.com/u/0/112916219338292742137/posts/XWiEEeDxFWZ?sfc=true
// CODE: https://gist.github.com/kriegsman/756ea6dcae8e30845b5a
// THANKYOU MARK!! X
// TwinkleFOX: Twinkling 'holiday' lights that fade in and out.
// Colors are chosen from a palette; a few palettes are provided.-( See Palettes tab )
// Overall twinkle speed.
// 0 (VERY slow) to 8 (VERY fast).
// 4, 5, and 6 are recommended, default is 4.
#define TWINKLE_SPEED 4
// Overall twinkle density.
// 0 (NONE lit) to 8 (ALL lit at once).
// Default is 5.
#define TWINKLE_DENSITY 8
// Background color for 'unlit' pixels
// Can be set to CRGB::Black if desired.
CRGB gBackgroundColor = CRGB::Black;
// Example of dim incandescent fairy light background color
//CRGB gBackgroundColor = CRGB(CRGB::FairyLight).nscale8_video(16);
// If AUTO_SELECT_BACKGROUND_COLOR is set to 1,
// then for any palette where the first two entries
// are the same, a dimmed version of that color will
// automatically be used as the background color.
#define AUTO_SELECT_BACKGROUND_COLOR 1
// If COOL_LIKE_INCANDESCENT is set to 1, colors will
// fade out slighted 'reddened', similar to how
// incandescent bulbs change color as they get dim down.
#define COOL_LIKE_INCANDESCENT 1
//=========================================================================================================
void TwinkleFox()
{
// "PRNG16" is the pseudorandom number generator
// It MUST be reset to the same starting value each time
// this function is called, so that the sequence of 'random'
// numbers that it generates is (paradoxically) stable.
uint16_t PRNG16 = 11337;
uint32_t clock32 = millis();
// Set up the background color, "bg".
// if AUTO_SELECT_BACKGROUND_COLOR == 1, and the first two colors of
// the current palette are identical, then a deeply faded version of
// that color is used for the background color
CRGB bg;
if( (AUTO_SELECT_BACKGROUND_COLOR == 1) &&
(gCurrentPalette[0] == gCurrentPalette[1] )) {
bg = gCurrentPalette[0];
uint8_t bglight = bg.getAverageLight();
if( bglight > 64) {
bg.nscale8_video( 16); // very bright, so scale to 1/16th
} else if( bglight > 16) {
bg.nscale8_video( 64); // not that bright, so scale to 1/4th
} else {
bg.nscale8_video( 86); // dim, scale to 1/3rd.
}
} else {
bg = gBackgroundColor; // just use the explicitly defined background color
}
uint8_t backgroundBrightness = bg.getAverageLight();
for( CRGB& pixel: leds) {
PRNG16 = (uint16_t)(PRNG16 * 2053) + 1384; // next 'random' number
uint16_t myclockoffset16= PRNG16; // use that number as clock offset
PRNG16 = (uint16_t)(PRNG16 * 2053) + 1384; // next 'random' number
// use that number as clock speed adjustment factor (in 8ths, from 8/8ths to 23/8ths)
uint8_t myspeedmultiplierQ5_3 = ((((PRNG16 & 0xFF)>>4) + (PRNG16 & 0x0F)) & 0x0F) + 0x08;
uint32_t myclock30 = (uint32_t)((clock32 * myspeedmultiplierQ5_3) >> 3) + myclockoffset16;
uint8_t myunique8 = PRNG16 >> 8; // get 'salt' value for this pixel
// We now have the adjusted 'clock' for this pixel, now we call
// the function that computes what color the pixel should be based
// on the "brightness = f( time )" idea.
CRGB c = computeOneTwinkle( myclock30, myunique8);
uint8_t cbright = c.getAverageLight();
int16_t deltabright = cbright - backgroundBrightness;
if( deltabright >= 32 || (!bg)) {
// If the new pixel is significantly brighter than the background color,
// use the new color.
pixel = c;
} else if( deltabright > 0 ) {
// If the new pixel is just slightly brighter than the background color,
// mix a blend of the new color and the background color
pixel = blend( bg, c, deltabright * 8);
} else {
// if the new pixel is not at all brighter than the background color,
// just use the background color.
pixel = bg;
}
}
// addGlitter(1); // Can be a bit much - Try it and see!
}
//=========================================================================================================
// This function takes a time in pseudo-milliseconds,
// figures out brightness = f( time ), and also hue = f( time )
// The 'low digits' of the millisecond time are used as
// input to the brightness wave function.
// The 'high digits' are used to select a color, so that the color
// does not change over the course of the fade-in, fade-out
// of one cycle of the brightness wave function.
// The 'high digits' are also used to determine whether this pixel
// should light at all during this cycle, based on the TWINKLE_DENSITY.
CRGB computeOneTwinkle( uint32_t ms, uint8_t salt)
{
uint16_t ticks = ms >> (8-TWINKLE_SPEED);
uint8_t fastcycle8 = ticks;
uint16_t slowcycle16 = (ticks >> 8) + salt;
slowcycle16 += sin8( slowcycle16);
slowcycle16 = (slowcycle16 * 2053) + 1384;
uint8_t slowcycle8 = (slowcycle16 & 0xFF) + (slowcycle16 >> 8);
uint8_t bright = 0;
if( ((slowcycle8 & 0x0E)/2) < TWINKLE_DENSITY) {
bright = attackDecayWave8( fastcycle8);
}
uint8_t hue = slowcycle8 - salt;
CRGB c;
if( bright > 0) {
c = ColorFromPalette( gCurrentPalette, hue, bright, NOBLEND);
if( COOL_LIKE_INCANDESCENT == 1 ) {
coolLikeIncandescent( c, fastcycle8);
}
} else {
c = CRGB::Black;
}
return c;
}
//=========================================================================================================
// This function is like 'triwave8', which produces a
// symmetrical up-and-down triangle sawtooth waveform, except that this
// function produces a triangle wave with a faster attack and a slower decay:
//
// / \
// / \
// / \
// / \
//
uint8_t attackDecayWave8( uint8_t i)
{
if( i < 86) {
return i * 3;
} else {
i -= 86;
return 255 - (i + (i/2));
}
}
//=========================================================================================================
// This function takes a pixel, and if its in the 'fading down'
// part of the cycle, it adjusts the color a little bit like the
// way that incandescent bulbs fade toward 'red' as they dim.
void coolLikeIncandescent( CRGB& c, uint8_t phase)
{
if( phase < 128) return;
uint8_t cooling = (phase - 128) >> 4;
c.g = qsub8( c.g, cooling);
c.b = qsub8( c.b, cooling * 2);
}
//=========================================================================================================
/*
____
.-" +' "-. __, ,___,
/.'.'A_'*`.\ (--|__| _,,_ ,_
|:.*'/\-\. ':| _| |(_||_)|_)\/
|:.'.||"|.'*:| ( | | _/
\:~^~^~^~^:/ __, ,___,
/`-....-'\ (--|__| _ |' _| _, ,
/ \ _| |(_)||(_|(_|\//_)
`-.,____,.-' ( _/
*/
//=========================================================================================================
// ---------------- //
////////////////////////////////// ALL PATTERNS ////////////////////////////////////////////
// ---------------- //
//Here are ALL the Animations and patterns - Sorry if your pattern has no shout-out... I lost track!
//(I TOLD THE ELVES NOT TO DECORATE HERE) - (FOR EASY COPYING TO YOUR OWN SKETCHES)
//======================================================================
void addGlitter( fract8 chanceOfGlitter)
{
if( random8() < chanceOfGlitter) {
leds[ random16(NUM_LEDS) ] += CRGB::White;
}
}
//======================================================================
void addSparkle( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[ random16(NUM_LEDS) ] += CRGB::Gold;
leds[ random16(NUM_LEDS) ] += CRGB::White;
}
}
//======================================================================
void addIridescentSparkle( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[random16(NUM_LEDS)] += CRGB::Purple;
leds[random16(NUM_LEDS)] += CRGB::Cyan;
}
}
//======================================================================
void addSparklebomb( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[ random16(NUM_LEDS) ] += CRGB::White;
leds[ random16(NUM_LEDS) ] += CRGB::FairyLight;
leds[ random16(NUM_LEDS) ] += CRGB::Silver;
leds[ random16(NUM_LEDS) ] += CRGB::FairyLightNCC;
}
}
//======================================================================
void addOldSchoolSparkle1( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[ random16(NUM_LEDS) ] += CRGB::FairyLight;
leds[ random16(NUM_LEDS) ] += CRGB::FairyLightNCC;
leds[ random16(NUM_LEDS) ] += CRGB::White;
}
}
//======================================================================
void addOldSchoolSparkle2( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[ random16(NUM_LEDS) ] += CRGB::FairyLightNCC;
leds[ random16(NUM_LEDS) ] += CRGB::Yellow;
leds[ random16(NUM_LEDS) ] += CRGB::Gold;
}
}
//======================================================================
void addGreenSparkle( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[ random16(NUM_LEDS) ] += CRGB::Green;
leds[ random8(NUM_LEDS) ] += CRGB::White;
}
}
//======================================================================
void addRedSparkle( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[ random16(NUM_LEDS) ] += CRGB::Red;
leds[ random8(NUM_LEDS) ] += CRGB::White;
}
}
//======================================================================
void addBlueSparkle( fract8 chanceOfSparkle)
{
if( random8() < chanceOfSparkle) {
leds[ random16(NUM_LEDS) ] += CRGB::Blue;
leds[ random8(NUM_LEDS) ] += CRGB::White;
}
}
//======================================================================
void addGlimmer( fract8 chanceOfGlitter)
{
int pos = beatsin16(15,1,NUM_LEDS-1); // (speed , start , end)
leds[pos] = CRGB( 130, GLOBAL_BRIGHTNESS, GLOBAL_BRIGHTNESS); // (hue, sat , brightness)
if( random8() < chanceOfGlitter) {
leds[random16(0,pos)] += CRGB( 255, 0, GLOBAL_BRIGHTNESS);
leds[random16(pos,NUM_LEDS)] += CRGB( 255, 0, GLOBAL_BRIGHTNESS);
}
}
//======================================================================
void rainbow_pulse()
{
thishue++;
if (thishue > 255) {thishue = 0;}
for(int idex = 0 ; idex < NUM_LEDS; idex++ ) {
leds[idex] = CHSV(thishue, thissat, GLOBAL_BRIGHTNESS);
}
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void rainbow_pulse2()
{
thishue++;
if (thishue > 255) {thishue = 0;}
for(int idex = 0 ; idex < NUM_LEDS; idex++ ) {
leds[idex] = CHSV(thishue, thissat, GLOBAL_BRIGHTNESS);
leds[random8(0,NUM_LEDS)] = CHSV(thishue+25, thissat, GLOBAL_BRIGHTNESS);
}
FastLED.delay(60);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void bighalfrainbow()
{
// FastLED's built-in rainbow generator
fill_rainbow( leds, NUM_LEDS, gHue, 1);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void bigrainbow()
{
// FastLED's built-in rainbow generator
fill_rainbow( leds, NUM_LEDS, gHue, 2);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void rainbow()
{
// FastLED's built-in rainbow generator
fill_rainbow( leds, NUM_LEDS, gHue, 15);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void miniRainbow()
{
// FastLED's built-in rainbow generator
fill_rainbow( leds, NUM_LEDS, gHue, 31);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void rainbowDots()
{
// FastLED's built-in rainbow generator
fill_rainbow( leds, NUM_LEDS, gHue, 62);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void confetti()
{
{// random colored speckles that blink in and fade smoothly
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/4);
int pos = random16(NUM_LEDS);
leds[pos] += CHSV( gHue + random8(64), 200, 255);
}
addGlitter(GLITTER_AMOUNT/4);
}
//======================================================================
void justGlitter()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void justSparkle()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addSparkle(SPARKLE_AMOUNT);
}
//======================================================================
void justSparkleOldSchool1()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addOldSchoolSparkle1(GLITTER_AMOUNT);
}
//======================================================================
void justSparkleOldSchool2()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addOldSchoolSparkle2(GLITTER_AMOUNT);
}
//======================================================================
void IridescentSparkle()
{
fill_solid(leds,NUM_LEDS,CHSV (ghue,70,(GLOBAL_BRIGHTNESS)));
addIridescentSparkle(GLITTER_AMOUNT/2);
}
//======================================================================
void CandleTree1()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
fill_solid(leds,NUM_LEDS,CHSV (0,255,(GLOBAL_BRIGHTNESS)));
addCandles(2); //chance of flicker
}
//======================================================================
void CandleTree2()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
fill_solid(leds,NUM_LEDS,CHSV (85,255,(GLOBAL_BRIGHTNESS)));
addCandles(2); //chance of flicker
}
//======================================================================
void CandleTree3()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
fill_solid(leds,NUM_LEDS,CHSV (150,255,(GLOBAL_BRIGHTNESS)));
addCandles(2); //chance of flicker
}
//======================================================================
void CandleTree4()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
fill_solid(leds,NUM_LEDS,CHSV (42,255,(GLOBAL_BRIGHTNESS)));
addCandles(2); //chance of flicker
}
//======================================================================
void GreenSparkle()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/2);
addGreenSparkle(GLITTER_AMOUNT*2);
}
//======================================================================
void RedSparkle()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/2);
addRedSparkle(GLITTER_AMOUNT*2);
}
//======================================================================
void BlueSparkle()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/2);
addBlueSparkle(GLITTER_AMOUNT*2);
}
//======================================================================
void rgbSparkle()
{
// built-in FastLED rainbow, plus some random sparkly glitter
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/2);
addGreenSparkle(GLITTER_AMOUNT);
addRedSparkle(GLITTER_AMOUNT);
addBlueSparkle(GLITTER_AMOUNT);
}
//======================================================================
void Glimmer()
{
fill_solid(leds,NUM_LEDS,CHSV (90,255,GLOBAL_BRIGHTNESS));
addGlimmer(GLITTER_AMOUNT);
//FastLED.delay(30);
}
//======================================================================
void RedRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addRedRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void GreenRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addGreenRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void BlueRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addBlueRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void PurpleRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addPurpleRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void TurquoiseRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addTurquoiseRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void YellowRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addYellowRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void RedWhiteRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addRedWhiteRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void GreenWhiteRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addGreenWhiteRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void BlueWhiteRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addBlueWhiteRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void PurpleWhiteRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addPurpleWhiteRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void TurquoiseWhiteRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addTurquoiseWhiteRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void YellowWhiteRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addYellowWhiteRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void GreenBlueRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addGreenBlueRipple(GLITTER_AMOUNT/4),GLOBAL_BRIGHTNESS;
//FastLED.delay(30);
}
//======================================================================
void YellowRedRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addYellowRedRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void TurquoisePurpleRipple()
{
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED);
addTurquoisePurpleRipple(GLITTER_AMOUNT/4);
//FastLED.delay(30);
}
//======================================================================
void juggle() {
// eight colored dots, weaving in and out of sync with each other
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/2);
byte dothue = 0;
for( int i = 0; i < 8; i++) {
leds[beatsin16(i+2,0,NUM_LEDS)] |= CHSV(dothue, 250, GLOBAL_BRIGHTNESS);
dothue += 32;
}
// addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void sinelon() // Original full color
{
// a colored dot sweeping back and forth, with fading trails
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/32);
int pos = beatsin16(5,1,NUM_LEDS-1);
leds[pos] += CHSV( gHue, 255, GLOBAL_BRIGHTNESS);
// addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void sinelon2() // Original half color (pastel)
{
// a pastel colored dot sweeping back and forth, with fading trails
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/32);
int pos = beatsin16(5,1,NUM_LEDS-1);
leds[pos] += CHSV( gHue, 170, GLOBAL_BRIGHTNESS);
// addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void sinelonWhite() // Original no color
{
// a white dot sweeping back and forth, with fading trails
fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/32);
int pos = beatsin16(10,1,NUM_LEDS-1);
leds[pos] += CHSV( gHue, 1, GLOBAL_BRIGHTNESS);
// addOldSchoolSparkle2(SPARKLE_AMOUNT);
}
//======================================================================
void random_burst()
{
int rndidx = random16(0, NUM_LEDS);
int rndhue = random8(50, 200);
int rndbright = random8((GLOBAL_BRIGHTNESS-5), GLOBAL_BRIGHTNESS);
leds[rndidx] = CHSV(rndhue, thissat, GLOBAL_BRIGHTNESS);
}
//======================================================================
void rgb_propeller()
{
thishue = 0;
index++;
int ghue = (thishue + 85) % 255;
int bhue = (thishue + 171) % 255;
int N3 = int(NUM_LEDS/3);
int N6 = int(NUM_LEDS/6);
int N12 = int(NUM_LEDS/12);
for(int i = 0; i < N3; i++ ) {
int j0 = (index + i + NUM_LEDS - N12) % NUM_LEDS;
int j1 = (j0+N3) % NUM_LEDS;
int j2 = (j1+N3) % NUM_LEDS;
leds[j0].maximizeBrightness();leds[j0] = CHSV(thishue, thissat, GLOBAL_BRIGHTNESS);
leds[j1].maximizeBrightness();leds[j1] = CHSV(ghue, thissat, GLOBAL_BRIGHTNESS);
leds[j2].maximizeBrightness();leds[j2] = CHSV(bhue, thissat, GLOBAL_BRIGHTNESS);
}
FastLED.delay(30);
// addGlitter(GLITTER_AMOUNT);
}
//======================================================================
void fill_rainbow_3(struct CRGB * pFirstLED, int numToFill, uint8_t initialhue, uint8_t deltahue, uint8_t saturation, uint8_t brightness)
{
CHSV hsv;
hsv.hue = initialhue;
hsv.sat = saturation;
hsv.val = GLOBAL_BRIGHTNESS;
for( int i = 0; i < numToFill; i++) {
hsv2rgb_rainbow( hsv, pFirstLED[i]);
hsv.hue += deltahue;
}
}
void rainbow3()
{
fill_rainbow_3( leds, NUM_LEDS, thishue, thisstep, thissat, GLOBAL_BRIGHTNESS);
thishue++;
addSparkle(GLITTER_AMOUNT);
}
//======================================================================
void rainbow_loop()
{
index++;
thishue = thishue + thisstep;
if (index >= NUM_LEDS) {index = 0;}
if (thishue > 255) {thishue = 0;}
leds[index] = CHSV(thishue, thissat, GLOBAL_BRIGHTNESS);
// addGlitter(10);
}
//======================================================================
void matrix1() // Green base with Red dots.
{
int rand = random8(230, 255);
if (rand > 250) {
leds[0] = CHSV(255, thissat, GLOBAL_BRIGHTNESS); // 0=Red ,50=Yellowish, 100=Green , 150=Blue, 200=Purple, 255=Red
}
else {
leds[0] = CHSV(100, thissat, GLOBAL_BRIGHTNESS);
}
for(int i = NUM_LEDS-1; i > 0; i--)
{
leds[i] = leds[i-1];
}
FastLED.delay(60);
}
//======================================================================
void matrix2() // Blue base with Green dots.
{
int rand = random8(230, 255);
if (rand > 250) {
leds[0] = CHSV(100, thissat, GLOBAL_BRIGHTNESS); // 0=Red ,50=Yellowish, 100=Green , 150=Blue, 200=Purple, 255=Red
}
else {
leds[0] = CHSV(150, thissat, GLOBAL_BRIGHTNESS);
}
for(int i = NUM_LEDS-1; i > 0; i--)
{
leds[i] = leds[i-1];
}
FastLED.delay(60);
}
//======================================================================
void matrix3() // Red base with Green dots.
{
int rand = random8(230, 255);
if (rand > 250) {
leds[0] = CHSV(100, thissat, GLOBAL_BRIGHTNESS); // 0=Red ,50=Yellowish, 100=Green , 150=Blue, 200=Purple, 255=Red
}
else {
leds[0] = CHSV(255, thissat, GLOBAL_BRIGHTNESS);
}
for(int i = NUM_LEDS-1; i > 0; i--)
{
leds[i] = leds[i-1];
}
FastLED.delay(60);
}
//======================================================================
void matrix4() // Light Green base with (dull)Yellow dots.
{
int rand = random8(230, 255);
if (rand > 250) {
leds[NUM_LEDS] = CHSV(60, thissat, GLOBAL_BRIGHTNESS); // 0=Red ,50=Yellowish, 100=Green , 150=Blue, 200=Purple, 255=Red
}
else {
leds[NUM_LEDS] = CHSV(120, thissat, GLOBAL_BRIGHTNESS);
}
for(int i = 0; i < NUM_LEDS; i++)
{
leds[i] = leds[i+1];
}
FastLED.delay(60);
}
//======================================================================
void matrix5() // Light Green base with Red dots.
{
int rand = random8(230, 255);
if (rand > 250) {
leds[NUM_LEDS] = CHSV(255, thissat, GLOBAL_BRIGHTNESS); // 0=Red ,50=Yellowish, 100=Green , 150=Blue, 200=Purple, 255=Red
}
else {
leds[NUM_LEDS] = CHSV(120, thissat, GLOBAL_BRIGHTNESS);
}
for(int i = 0; i < NUM_LEDS; i++)
{
leds[i] = leds[i+1];
}
FastLED.delay(60);
}
//======================================================================
void matrix6() // Light White base with Purple dots.
{
int rand = random8(230, 255);
if (rand > 250) {
leds[NUM_LEDS] = CHSV(200, 255, GLOBAL_BRIGHTNESS); // 0=Red ,50=Yellowish, 100=Green , 150=Blue, 200=Purple, 255=Red
}
else {
leds[NUM_LEDS] = CHSV(150, 100, GLOBAL_BRIGHTNESS);
}
for(int i = 0; i < NUM_LEDS; i++)
{
leds[i] = leds[i+1];
}
FastLED.delay(60);
}
//======================================================================
void random_march()
{
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {index=0;}
leds[index-1] = CHSV(random(16,120), 255,GLOBAL_BRIGHTNESS);
leds[index] = CRGB::White;
FastLED.delay(2);
}
//======================================================================
void candycane()
{
index++;
int N3 = int(NUM_LEDS/3);
int N6 = int(NUM_LEDS/6);
int N12 = int(NUM_LEDS/12);
for(int i = 0; i < N6; i++ ) {
int j0 = (index + i + NUM_LEDS - N12) % NUM_LEDS;
int j1 = (j0+N6) % NUM_LEDS;
int j2 = (j1+N6) % NUM_LEDS;
int j3 = (j2+N6) % NUM_LEDS;
int j4 = (j3+N6) % NUM_LEDS;
int j5 = (j4+N6) % NUM_LEDS;
leds[j0] = CRGB(255, 255, 255).nscale8_video(GLOBAL_BRIGHTNESS);
leds[j1] = CRGB(255, 0, 0).nscale8_video(GLOBAL_BRIGHTNESS);
leds[j2] = CRGB(255, 255, 255).nscale8_video(GLOBAL_BRIGHTNESS);
leds[j3] = CRGB(255, 0, 0).nscale8_video(GLOBAL_BRIGHTNESS);
leds[j4] = CRGB(255, 255, 255).nscale8_video(GLOBAL_BRIGHTNESS);
leds[j5] = CRGB(255, 0, 0).nscale8_video(GLOBAL_BRIGHTNESS);
}
FastLED.delay(60);
}
//======================================================================
void RedGreenWhiteDot()
{
int pos = beatsin16(3,2,NUM_LEDS-2);
leds[pos+1] = CHSV(100,255,GLOBAL_BRIGHTNESS); //trail Green
leds[pos] = CHSV (130,0,GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[pos-1] = CHSV(0,255,GLOBAL_BRIGHTNESS); //trail Red
}
//===================================================================================================================================================
void GreenGreenWhiteDot()
{
int pos = beatsin16(3,2,NUM_LEDS-2);
leds[pos+1] = CHSV(90,255,GLOBAL_BRIGHTNESS); //trail Green
leds[pos] = CHSV (130,0, GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[pos-1] = CHSV(120,255,GLOBAL_BRIGHTNESS); //trail Light Green
}
//===================================================================================================================================================
void GreenBlueWhiteDot()
{
int pos = beatsin16(3,2,NUM_LEDS-2);
leds[pos+1] = CHSV(135,255,GLOBAL_BRIGHTNESS); //trail Light Blue
leds[pos] = CHSV (130,0,GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[pos-1] = CHSV(115,255,GLOBAL_BRIGHTNESS); //trail Light Green
}
//===================================================================================================================================================
void YellowGreenWhiteDot()
{
int pos = beatsin16(3,2,NUM_LEDS-2);
leds[pos+1] = CHSV(40,255,GLOBAL_BRIGHTNESS); //trail Random Yellow
leds[pos] = CHSV (130,0,GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[pos-1] = CHSV(80,255,GLOBAL_BRIGHTNESS); //trail Random Green
}
//===================================================================================================================================================
void chaserfadeRedGreenWhiteDot() // OLD VERSION DOES NOT WORK WITH REMOTE PROPERLY SO NOT BEING USED
{
uint32_t irCode=0; // TRIED A FIX....
if (irCode >=1){return;} // .... BUT NEEDS TESTING STILL...
for(int dot=(NUM_LEDS-1) ; dot >=0 ; dot--){
leds[dot-1] = CRGB::White;
leds[dot] = CRGB::Red;
fadeToBlackBy( leds, NUM_LEDS, 1);
FastLED.delay(1000/fps*8);
}
for(int dot = 0;dot < NUM_LEDS; dot++){
leds[dot] = CRGB::White;
leds[dot-1] = CRGB::Green;
fadeToBlackBy( leds, NUM_LEDS, 0.1);
FastLED.delay(1000/fps*8);
}
}
//======================================================================
void SilentNightRiderRedGreen()// OLD VERSION DOES NOT WORK WITH REMOTE PROPERLY SO NOT BEING USED
{
uint32_t irCode=0;
if (irCode >=1){return;}
for(int dot=(NUM_LEDS-1) ; dot >=0 ; dot--){
leds[dot] = CRGB::Red;
fadeToBlackBy( leds, NUM_LEDS, 1);
FastLED.delay(1000/fps*8);
}
for(int dot = 0;dot < NUM_LEDS; dot++){
leds[dot] = CRGB::Green;
fadeToBlackBy( leds, NUM_LEDS, 0.1);
FastLED.delay(1000/fps*8);
}
}
//======================================================================
void colorwipeRedGreen()// OLD VERSION DOES NOT WORK WITH REMOTE PROPERLY SO NOT BEING USED
{
uint32_t irCode=0;
if (irCode >=1){return;}
for(int dot=(NUM_LEDS-1) ; dot >=0 ; dot--){
leds[dot] = CRGB::Red;
FastLED.delay(1000/fps*8);
}
for(int dot = 0;dot < NUM_LEDS; dot++){
leds[dot] = CRGB::Green;
FastLED.delay(1000/fps*8);
}
}
//===================================================================================================================================================
void fireStarter(){
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
ledh[index] = 64; // can be used to choose color
//The following lines create the fire starter effect
thisbright = random((GLOBAL_BRIGHTNESS-5), (GLOBAL_BRIGHTNESS));// Randomly select a brightness between 50 and 100
ledb[index] = thisbright; // Assign this random brightness value to the trailing LEDs
addPixieDust(0); // change to 1 for pulse 10 for neato pulse // Call the sparkle routine to create that sparkling effect. The potentiometer controls the difference in hue from LED to LED.
leds[index] = (ledh[index],255,255);
leds[index] = CRGB::White;
// leds[index] = CHSV (64,random(20,80), GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW DOT
// fadeToBlackBy( leds, NUM_LEDS, 200);
FastLED.delay(1000/fps);
}
//======================================================================
void pixieDustBackground1(){ //still needs that yellow trail between colors...??? how???
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
if(index<= 0) {thishue+=64;}
ledh[index] = thishue; // can be used to choose color uncomment
//The following lines create the fire starter effect
thisbright = random((GLOBAL_BRIGHTNESS-5), (GLOBAL_BRIGHTNESS));// Randomly select a brightness between 50 and 100
ledb[index] = thisbright; // Assign this random brightness value to the trailing LEDs
sparkle(0); // change to 1 for pulse 10 for neato pulse // Call the sparkle routine to create that sparkling effect. The potentiometer controls the difference in hue from LED to LED.
leds[index] = (ledh[thishue],255,255);
leds[index] = CRGB::White;
// leds[index] = CHSV (64,random(20,80), GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW DOT
// fadeLEDs(0.4); // A low number creates a longer tail
FastLED.delay(1000/fps);
}
//======================================================================
void fireStarterGHUE_RAINBOW(){
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
ledh[index] = (gHue); // can be used to choose color uncomment
//The following lines create the fire starter effect
thisbright = random((GLOBAL_BRIGHTNESS-5), (GLOBAL_BRIGHTNESS));// Randomly select a brightness between 50 and 100
ledb[index] = thisbright; // Assign this random brightness value to the trailing LEDs
sparkle(0); // change to 1 for pulse 10 for neato pulse // Call the sparkle routine to create that sparkling effect. The potentiometer controls the difference in hue from LED to LED.
leds[index] = (ledh[gHue],255,255);
leds[index] = CRGB::White;
// fadeLEDs(0.4); // A low number creates a longer tail
FastLED.delay(1000/fps);
}
//======================================================================
void fireStarter_RAINBOW_PULSE_SLOW(){
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
ledh[index] = (ghue); // can be used to choose color uncomment
//The following lines create the fire starter effect
thisbright = random((GLOBAL_BRIGHTNESS-5), (GLOBAL_BRIGHTNESS));// Randomly select a brightness between 50 and 100
ledb[index] = thisbright; // Assign this random brightness value to the trailing LEDs
sparkle(0); // change to 1 for slow pulse 10 for fast neato pulse
// Call the sparkle routine to create that sparkling effect.
//The index (or could be gHue) controls the difference in hue from LED to LED.
leds[index] = (ledh[ghue],255,255);
leds[index] = CRGB::White;
// fadeLEDs(0.4); // A low number creates a longer tail
FastLED.delay(1000/fps);
}
//======================================================================
void fireStarter_YELLOW_GREEN(){
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
ledh[index] = 64; // can be used to choose color uncomment
//The following lines create the fire starter effect
thisbright = random((GLOBAL_BRIGHTNESS-5), (GLOBAL_BRIGHTNESS));// Randomly select a brightness between 50 and 100
ledb[index] = thisbright; // Assign this random brightness value to the trailing LEDs
sparkle(1); // change to 1 for slow pulse 10 for fast neato pulse
// Call the sparkle routine to create that sparkling effect.
//The index (or could be gHue) controls the difference in hue from LED to LED.
leds[index] = (ledh[index],255,255);
leds[index] = CRGB::White;
// fadeLEDs(0.4); // A low number creates a longer tail
FastLED.delay(1000/fps);
}
//===================================================================================================================================================
// sparkle() : is used by the fireStarter routine to create a sparkling/fire-like effect
// Each LED hue and brightness is monitored and modified using arrays (ledh[] and ledb[])
//===================================================================================================================================================
void sparkle(byte hDiff){
for(int i = 0; i < NUM_LEDS; i++) {
ledh[i] = ledh[i] + hDiff; // hDiff controls the extent to which the hue changes along the trailing LEDs
// This will prevent "negative" brightness.
if(ledb[i]<255-17){
ledb[i]=255-20;
}
// The probability of "re-igniting" an LED will decrease as you move along the tail
// Once the brightness reaches zero, it cannot be re-ignited unless the leading LED passes over it again.
if(ledb[i]>255-20){
ledb[i]=ledb[i]-2;
sparkTest = random(0,GLOBAL_BRIGHTNESS);
if(sparkTest>(GLOBAL_BRIGHTNESS-(ledb[i]/1.1))){
ledb[i] = GLOBAL_BRIGHTNESS;
} else {
ledb[i] = ledb[i] / 2;
}
}
leds[i] = CHSV(ledh[i],255,ledb[i]);
}
// addGlitter(GLITTER_AMOUNT/2);
}
//===================================================================================================================================================
void addPixieDust(byte hDiff){
for(int i = 0; i < NUM_LEDS; i++) {
ledh[i] = ledh[i] + hDiff; // hDiff controls the extent to which the hue changes along the trailing LEDs
// This will prevent "negative" brightness.
if(ledb[i]<3){
ledb[i]=0;
}
// The probability of "re-igniting" an LED will decrease as you move along the tail
// Once the brightness reaches zero, it cannot be re-ignited unless the leading LED passes over it again.
if(ledb[i]>0){
ledb[i]=ledb[i]-2;
sparkTest = random(0,GLOBAL_BRIGHTNESS);
if(sparkTest>(GLOBAL_BRIGHTNESS-(ledb[i]/1.1))){
ledb[i] = GLOBAL_BRIGHTNESS;
} else {
ledb[i] = ledb[i] / 2; //was 2
}
}
leds[i] = CHSV(ledh[i],255,ledb[i]);
}
// addGlitter(GLITTER_AMOUNT/2);
}
//===================================================================================================================================================
void cometEffect()
{
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
leds[index] = CHSV(64,255,GLOBAL_BRIGHTNESS); //trail
// leds[index] = CHSV(gHue*10,random16(0,60),random16((GLOBAL_BRIGHTNESS/3),(GLOBAL_BRIGHTNESS))); //trail RAINBOW++
fadeLEDs(4);
FastLED.delay(1000/fps*2);
}
//===================================================================================================================================================
void cometEffectSinelonGHUE_SLOW_RAINBOW()
{
// fadeToBlackBy( leds, NUM_LEDS, FADEOUT_SPEED/32);
int pos = beatsin16(3,2,NUM_LEDS-2);
// leds[pos] += CHSV( gHue, 255, 255);
leds[pos+1] = CHSV(ghue,random16(200,255),GLOBAL_BRIGHTNESS); //trail RAINBOW++
leds[pos] = CHSV (130,0, GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[pos-1] = CHSV(ghue,random16(200,255),GLOBAL_BRIGHTNESS); //trail RAINBOW++
// leds[index] = CHSV (random(64, 86), random(0, 50), random16((GLOBAL_BRIGHTNESS/3),(GLOBAL_BRIGHTNESS))); //trail YELLOW TO LIGHT GREEN
fadeLEDs(3);
// FastLED.delay(1000/fps*2);
}
//===================================================================================================================================================
void cometChaserRAINBOW()
{
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
leds[index+1] = CHSV (130,0,GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[index] = CHSV(gHue,random16(200,255),GLOBAL_BRIGHTNESS);//trail RAINBOW++
fadeLEDs(4);
FastLED.delay(1000/fps*2);
}
//===================================================================================================================================================
void cometChaserAQUA()
{
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
leds[index+1] = CHSV (130,0, GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[index] = CHSV(random16(128,135),random16(100,255),GLOBAL_BRIGHTNESS); //trail AQUA TO LIGHT BLUE
fadeLEDs(4);
FastLED.delay(1000/fps*2);
}
//===================================================================================================================================================
void cometChaserYELLOW_GREEN()
{
if(index < NUM_LEDS) {index++;}
if(index >= NUM_LEDS-1) {leds[index] = leds[index-1]; index=0;} // take last index=0; off for a 1 shot comet (1 pass)
leds[index+1] = CHSV (64,30, GLOBAL_BRIGHTNESS); //dot WHITE TO PALE YELLOW
leds[index] = CHSV (random(64, 86), random(100, 255), GLOBAL_BRIGHTNESS); //trail YELLOW TO LIGHT GREEN
fadeLEDs(4);
FastLED.delay(1000/fps*2);
}
//===================================================================================================================================================
void fadeLEDs(int fadeVal){ // used for cometChaser
for (int i = 0; i<NUM_LEDS; i++){
leds[i].fadeToBlackBy(fadeVal/4);
}
}
//===================================================================================================================================================
void meteorRain()
{
// meteorRain - Color (red, green, blue), meteor size, trail decay, random trail decay (true/false), speed delay
meteorRain(0xff,0xff,0xff, 2, 20, true);
// 20 for testing 100 leds / 10 for 200 leds?
}
void meteorRain(byte red, byte green, byte blue, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay) {
setAll(0,0,0);
for(int i = 0; i < NUM_LEDS+NUM_LEDS; i++) {
// fade brightness all LEDs one step
for(int j=0; j<NUM_LEDS; j++) {
if( (!meteorRandomDecay) || (random(10)>5) ) {
fadeToBlack(j, meteorTrailDecay );
}
}
// draw meteor
for(int j = 0; j < meteorSize; j++) {
if( ( i-j <NUM_LEDS) && (i-j>=0) ) {
setPixel(i-j, red, green, blue);
}
}
showStrip();
FastLED.delay(1000/fps*2);
}
}
// used by meteorrain
void fadeToBlack(int ledNo, byte fadeValue) {
leds[ledNo].fadeToBlackBy( fadeValue );
}
//======================================================================
void NewKITT_ALL()
{
RightToLeft(0, 0xff, 0, 50, 25, 0);
LeftToRight(0, 0xff, 0, 50, 25, 0);
}
// used by NewKITT
void LeftToRight(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
for(int i = 0; i < NUM_LEDS-EyeSize-2; i++) {
setAll(0,0,0);
setPixel(i, red/10, green/10, blue/10);
for(int j = 1; j <= EyeSize; j++) {
setPixel(i+j, red, green, blue);
}
setPixel(i+EyeSize+1, red/10, green/10, blue/10);
showStrip();
FastLED.delay(SpeedDelay);
}
FastLED.delay(ReturnDelay);
}
// used by NewKITT
void RightToLeft(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
for(int i = NUM_LEDS-EyeSize-2; i > 0; i--) {
setAll(0,0,0);
setPixel(i, red/10, green/10, blue/10);
for(int j = 1; j <= EyeSize; j++) {
setPixel(i+j, red, green, blue);
}
setPixel(i+EyeSize+1, red/10, green/10, blue/10);
showStrip();
FastLED.delay(SpeedDelay);
}
FastLED.delay(ReturnDelay);
}
//======================================================================
void showLED(int pos, int thishue, int thissat, int GLOBAL_BRIGHTNESS)
{
leds[pos] = CHSV (thishue, thissat, GLOBAL_BRIGHTNESS);
FastLED.show();
}
//======================================================================
void showStrip()
{
FastLED.show();
}
//======================================================================
void setPixel(int Pixel, byte red, byte green, byte blue) {
leds[Pixel].r = red;
leds[Pixel].g = green;
leds[Pixel].b = blue;
}
//======================================================================
void setAll(byte red, byte green, byte blue) {
for(int i = 0; i < NUM_LEDS; i++ ) {
setPixel(i, red, green, blue);
}
}
//======================================================================
//======================================================================
//*Animations End*