Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Title: DemoReel100 with Button and a little more
- By: Mark Kriegsman
- Button added by: Andrew Tuline
- Pot-controlled Cylon pattern added by: Kevin Althans
- - FastLED library (get 3.1) from https://github.com/FastLED/FastLED
- - JChristensen's Button Library from https://github.com/JChristensen/Button
- */
- #include "FastLED.h"
- #include "Button.h" // Button library. Includes press, long press, double press detection.
- // 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
- //
- // I'm trying to adapt this code to include some other loop-based patterns...
- // having a little trouble getting that extra loop to break out on button.
- #if FASTLED_VERSION < 3001000
- #error "Requires FastLED 3.1 or later; check github for latest code."
- #endif
- // Pushbutton pin definition
- const int buttonPin = 12; // Digital pin used for debounced pushbutton
- // int buttonState = 0;
- // int lastButtonState = 0;
- Button myBtn(buttonPin, true, true, 50); // Declare the button
- #define DATA_PIN 6
- #define CLK_PIN 13
- #define LED_TYPE WS2812
- #define COLOR_ORDER GRB
- #define NUM_LEDS 50
- CRGB leds[NUM_LEDS];
- #define FRAMES_PER_SECOND 120
- uint8_t max_bright = 64;
- void setup() {
- Serial.begin(57600);
- delay(3000); // 3 second delay for recovery
- 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(max_bright);
- }
- // 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, cylon};
- 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(); // Button press increases the ledMode up to last contiguous mode and then starts over at 0.
- }
- #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;
- }
- }
- void cylon() {
- const int DelayPot = A0; //the Delay potentiometer pin
- const int BrightnessPot = A1; //the brightness of "V" pot pin
- const int HuePot = A2; //a hue changing value
- int DelayPotRead = 0; //the value from the Delay potentiometer
- int Delay = 0; //the Delay pot's value converted to a delay value
- int BrightnessPotRead = 0; // Brightness value from pot
- int BrightnessValue = 0; //start off at 0% briteness
- int DelayMin = 0; //DelayMinimum value of the delay
- int DelayMax = 30; //DelayMax value of delay
- int HuePotRead = 0; //Set Hue to 0
- static uint8_t hue = 0;
- Serial.println("loop");
- // First slide the led in one direction
- for(int i = 0; i < NUM_LEDS; i++) {
- DelayPotRead = analogRead(DelayPot); //get reading from Delay pot and convert to Delay
- Delay = map(DelayPotRead,0,1023,DelayMin,DelayMax); //map pot reading to a value between DelayMin and DelayMax
- BrightnessPotRead = analogRead(BrightnessPot); //get reading from brightness pot and convert to BrightnessValue
- BrightnessValue = map(BrightnessPotRead,0,1023,255,64); //map pot reading to a V or brightness value from 64 to 255, reversed
- HuePotRead = analogRead(HuePot);
- Serial.print(" Delay=");
- Serial.println(Delay);
- Serial.print(" Brightness=");
- Serial.println(BrightnessValue);
- Serial.print(" hue=");
- Serial.println(hue);
- if (HuePotRead < 50)
- {
- hue++;
- }
- else
- {
- hue = map(HuePotRead,0,1023,255,0);
- }
- leds[i] = CHSV(hue, 255, BrightnessValue); // Set the i'th led to whatever color
- FastLED.show(); // Show the leds
- for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250);} // Fade out the LEDs
- delay(Delay); // Wait a little bit before we loop around and do it again
- }
- // Now go in the other direction.
- for(int i = (NUM_LEDS)-1; i >= 0; i--) {
- DelayPotRead = analogRead(DelayPot); //get reading from Delay pot and convert to Delay
- Delay = map(DelayPotRead,0,1023,DelayMin,DelayMax);
- BrightnessPotRead = analogRead(BrightnessPot); //get reading from brightness pot and convert to BrightnessValue
- BrightnessValue = map(BrightnessPotRead,0,1023,255,64); //map pot reading to a V or brightness value from 64 to 255, reversed
- HuePotRead = analogRead(HuePot);
- Serial.print(" Delay=");
- Serial.println(Delay);
- Serial.print(" Brightness=");
- Serial.println(BrightnessValue);
- Serial.print(" hue=");
- Serial.println(hue);
- if (HuePotRead < 50) // create a deadband for pot to trigger “rainbow” mode
- {
- hue++; // this is rainbow mode
- }
- else
- {
- hue = map(HuePotRead,0,1023,255,0); // map pot values to 8bit space
- }
- leds[i] = CHSV(hue, 255, BrightnessValue); // Set the i'th led to red
- FastLED.show(); // Show the leds
- for(int i = 0; i < NUM_LEDS; i++) { leds[i].nscale8(250);} // Fade out the LEDs
- delay(Delay); // Wait a little bit before we loop around and do it again
- }
- }
- void readbutton() { // Read the button and increase the mode
- myBtn.read();
- if(myBtn.wasReleased()) {
- nextPattern();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment