Last active
September 20, 2018 17:01
-
-
Save mneuschaefer/50fe4537a589a2e698b32f7ae7423f14 to your computer and use it in GitHub Desktop.
#Arduino FastLed Effects for 25x25 LED matrix with button
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "FastLED.h" | |
// FastLED library from | |
// https://github.com/FastLED/FastLED | |
FASTLED_USING_NAMESPACE | |
// Based on FastLED "100-lines-of-code" demo reel from Mark Kriegsmann | |
// https://github.com/FastLED/FastLED/tree/master/examples/DemoReel100 | |
#if defined(FASTLED_VERSION) && (FASTLED_VERSION < 3001000) | |
#warning "Requires FastLED 3.1 or later; check github for latest code." | |
#endif | |
// define data pins here | |
#define DATA_PIN 5 | |
// define button pin here | |
#define BTN_PIN 10 | |
// define number of LEDs | |
#define NUM_LEDS 25 | |
#define LED_TYPE WS2811 | |
#define COLOR_ORDER GRB | |
#define CONFETTIDELAY 30 | |
// delay for confetti effect | |
CRGB leds[NUM_LEDS]; | |
#define BRIGHTNESS 255 | |
// #define FRAMES_PER_SECOND | |
int FRAMES_PER_SECOND = 18; | |
void setup() { | |
pinMode(BTN_PIN, INPUT_PULLUP); | |
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); | |
// set master brightness control | |
FastLED.setBrightness(BRIGHTNESS); | |
} | |
// List of patterns to cycle through. Each is defined as a separate function below. | |
typedef void (*SimplePatternList[])(); | |
// define patterns here, e.g. (full list): | |
// SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, juggle, bpm }; | |
SimplePatternList gPatterns = {confetti, rainbowWithGlitter, juggle, bpm, sinelon}; | |
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(2000 / FRAMES_PER_SECOND); | |
// do some periodic updates | |
EVERY_N_MILLISECONDS( 20 ) { | |
gHue++; // slowly cycle the "base color" through the rainbow | |
} | |
// check oif button pressed | |
if (digitalRead(BTN_PIN) == LOW) { | |
// if button pressed, switch pattern | |
nextPattern(); | |
} | |
//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, 4); | |
} | |
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, 40); | |
int pos = random16(NUM_LEDS); | |
leds[pos] += CHSV( gHue + random8(64), 200, 255); | |
delay(CONFETTIDELAY); | |
} | |
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 * 5)); | |
} | |
} | |
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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment