Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
FastLED "100-line" demo reel
#include "FastLED.h"
// FastLED "100-lines-of-code" demo reel, showing just a few
// of the kinds of animation patterns you can quickly and easily
// compose using FastLED.
//
// This example also shows one easy way to define multiple
// animations patterns and have them automatically rotate.
//
// -Mark Kriegsman, December 2014
#if FASTLED_VERSION < 3001000
#error "Requires FastLED 3.1 or later; check github for latest code."
#endif
#define DATA_PIN 3
//#define CLK_PIN 4
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS 64
CRGB leds[NUM_LEDS];
#define BRIGHTNESS 96
#define FRAMES_PER_SECOND 120
void setup() {
delay(3000); // 3 second delay for recovery
// tell FastLED about the LED strip configuration
FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
//FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
// set master brightness control
FastLED.setBrightness(BRIGHTNESS);
}
// List of patterns to cycle through. Each is defined as a separate function below.
typedef void (*SimplePatternList[])();
SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, juggle, bpm };
uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
void loop()
{
// Call the current pattern function once, updating the 'leds' array
gPatterns[gCurrentPatternNumber]();
// send the 'leds' array out to the actual LED strip
FastLED.show();
// insert a delay to keep the framerate modest
FastLED.delay(1000/FRAMES_PER_SECOND);
// do some periodic updates
EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically
}
#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))
void nextPattern()
{
// add one to the current pattern number, and wrap around at the end
gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns);
}
void rainbow()
{
// FastLED's built-in rainbow generator
fill_rainbow( leds, NUM_LEDS, gHue, 7);
}
void rainbowWithGlitter()
{
// built-in FastLED rainbow, plus some random sparkly glitter
rainbow();
addGlitter(80);
}
void addGlitter( fract8 chanceOfGlitter)
{
if( random8() < chanceOfGlitter) {
leds[ random16(NUM_LEDS) ] += CRGB::White;
}
}
void confetti()
{
// random colored speckles that blink in and fade smoothly
fadeToBlackBy( leds, NUM_LEDS, 10);
int pos = random16(NUM_LEDS);
leds[pos] += CHSV( gHue + random8(64), 200, 255);
}
void sinelon()
{
// a colored dot sweeping back and forth, with fading trails
fadeToBlackBy( leds, NUM_LEDS, 20);
int pos = beatsin16(13,0,NUM_LEDS);
leds[pos] += CHSV( gHue, 255, 192);
}
void bpm()
{
// colored stripes pulsing at a defined Beats-Per-Minute (BPM)
uint8_t BeatsPerMinute = 62;
CRGBPalette16 palette = PartyColors_p;
uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
for( int i = 0; i < NUM_LEDS; i++) { //9948
leds[i] = ColorFromPalette(palette, gHue+(i*2), beat-gHue+(i*10));
}
}
void juggle() {
// eight colored dots, weaving in and out of sync with each other
fadeToBlackBy( leds, NUM_LEDS, 20);
byte dothue = 0;
for( int i = 0; i < 8; i++) {
leds[beatsin16(i+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 255);
dothue += 32;
}
}
@l8gravely

This comment has been minimized.

Copy link

l8gravely commented Jan 21, 2015

Thanks for writing and sharing this code, but where do you get the defines for the EVERY_N_MILLISECONDS( 20 ) and EVERY_N_SECONDS( 10 ) macros/functions? I'm playing around using the library on an AdaFruit Gemma so for me, size is key.

Thanks,
John

@kriegsman

This comment has been minimized.

Copy link
Owner Author

kriegsman commented Feb 20, 2015

Hi and sorry for the delay in responding! Those capabilities are part of the FastLED 3.1 branch, on GitHub. They don't particularly take up much more room that the equivalent hand-written code.

@AAli77

This comment has been minimized.

Copy link

AAli77 commented May 29, 2017

Hi, I read your code nicely written. But I am new to Arduino platform but I had a programming experience when I deployed you code its give me an error message for library FastLED.h. Can you please also include what libraries do I had to installed before the coding.

thanks

AA

@samckitt

This comment has been minimized.

Copy link

samckitt commented Oct 26, 2017

You have any code to do this on a Particle Photon?

@samiraa78

This comment has been minimized.

Copy link

samiraa78 commented Dec 20, 2017

hi i am using esp8266 NODE MCU, for some reason FAST LED lib does not work only the first two led light up apart from that nothing happens, all other libs like adifruit and 8266fx work fine

Can you guide me as to the reason for the same

@DeivesBender

This comment has been minimized.

Copy link

DeivesBender commented Aug 28, 2018

Hello friend, sorry for the inconvenience, I found your code browsing the internet, but I did not find your schematic, could you share the schematic with me? thank you.

@EIZZDDIN

This comment has been minimized.

Copy link

EIZZDDIN commented Feb 20, 2019

when i try ws2801 and choose the clk pin it give me so many errors for Arduino uno

@Gknowsis111

This comment has been minimized.

Copy link

Gknowsis111 commented Jun 13, 2019

For some reason when I add a new animation pattern to the list and define it at the end of the code is says my it was not declared in the scope?

@kriegsman

This comment has been minimized.

Copy link
Owner Author

kriegsman commented Jun 14, 2019

Just so folks know, you can get help with FastLED questions, code, and projects over at http://www.reddit.com/r/FastLED

See you there!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.