Instantly share code, notes, and snippets.
Created
July 6, 2017 15:55
-
Save slurrybowl/53177ff1c70de8959c8aab514d159505 to your computer and use it in GitHub Desktop.
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_USING_NAMESPACE | |
// 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 6 | |
//#define CLK_PIN 4 | |
#define LED_TYPE WS2811 | |
#define COLOR_ORDER GRB | |
#define NUM_LEDS 12 | |
CRGB leds[NUM_LEDS]; | |
#define BRIGHTNESS 96 | |
#define FRAMES_PER_SECOND 120 | |
#include "Button.h" // Include Button library | |
int i = 12; | |
const int buttonPinA = 1; // Set digital pin 4 for button A | |
Button myButtonA(buttonPinA, true, true, 50); | |
const int buttonPinB = 2; // Set digital pin 5 for button B | |
Button myButtonB(buttonPinB, true, true, 50); | |
const int buttonPinC = 3; // Set digital pin 4 for button C | |
Button myButtonC(buttonPinC, true, true, 50); | |
const int buttonPinD = 4; // Set digital pin 5 for button D | |
Button myButtonD(buttonPinD, true, true, 50); | |
void setup() { | |
Serial.begin(115200); | |
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 = { confetti_GB, sinelon_B, juggle_B, rainbow}; | |
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 | |
readbutton(); // check for button press | |
} | |
#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_B() | |
{ | |
// a colored dot sweeping back and forth, with fading trails | |
int Hue = 155; | |
fadeToBlackBy( leds, NUM_LEDS, 20); | |
int pos = beatsin16(40,0,NUM_LEDS); | |
leds[pos] += CHSV( Hue, 255, 200); | |
} | |
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_B() { | |
// eight colored dots, weaving in and out of sync with each other | |
fadeToBlackBy( leds, NUM_LEDS, 20); | |
byte dothue = 155; | |
for( int i = 0; i < 8; i++) { | |
leds[beatsin16(i+7,0,NUM_LEDS)] |= CHSV(dothue, 200, 255); | |
//dothue += 32; | |
} | |
} | |
void confetti_GB() | |
{ | |
// random colored speckles, Green and Blue hues only | |
// Green = 96, Blue = 160 | |
uint8_t p = 60; // What percentage of the time to make speckles. [Range 0-100] | |
fadeToBlackBy( leds, NUM_LEDS, 10); | |
if (random8(100) < p) { | |
int pos = random16(NUM_LEDS); | |
uint8_t hue = random8(2); // randomly chooses a 0 or 1 | |
if (hue == 0) { | |
hue = random8(92,111); // pick a hue somewhere in the green zone | |
} else { | |
hue = random8(156,165); // pick a hue somewhere in the blue zone | |
} | |
leds[pos] += CHSV( hue, random8(200,240), 255); | |
} | |
}//end confetti_GB | |
//BUTTON STUFF | |
//---------Function to read the buttons and do something---------- | |
void readbutton() { | |
myButtonA.read(); | |
if(myButtonA.wasPressed()) { | |
leds[i].setRGB( 255, 0, 0); | |
FastLED.show(); | |
delay(30); | |
//A was pressed so set a variable or do something | |
} | |
myButtonB.read(); | |
if(myButtonB.wasPressed()) { | |
leds[i].setRGB( 0, 255, 0); | |
FastLED.show(); | |
delay(30); | |
//B was pressed so set a variable or do something | |
} | |
myButtonC.read(); | |
if(myButtonC.wasPressed()) { | |
leds[i].setRGB( 0, 0, 225); | |
FastLED.show(); | |
delay(30); | |
//C was pressed so set a variable or do something | |
} | |
myButtonD.read(); | |
if(myButtonD.wasPressed()) { | |
leds[i].setRGB( 0, 255, 225); | |
FastLED.show(); | |
delay(30); | |
//D was pressed so set a variable or do something | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment