Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <FastLED.h>
- #include <ClickEncoder.h>
- #include <TimerOne.h>
- #define DATA_PIN 6
- #define LED_TYPE WS2812B
- #define COLOR_ORDER GRB
- #define NUM_LEDS 16
- CRGB leds[NUM_LEDS];
- #define BRIGHTNESS 120
- #define FRAMES_PER_SECOND 120
- bool brightnessMode = false;
- ClickEncoder *encoder;
- int16_t last, value;
- void timerIsr() {
- encoder->service();
- }
- //Light Box Colors Travel CCW starting bottom middle.
- //Define Gradient Palette up here, create gpattern below loop, add gpattern to simplepatternlist
- DEFINE_GRADIENT_PALETTE( PurpleOrange_gp ) {
- 0, 147, 0, 150, //(purple)
- 110, 255, 69, 0, //(orange)
- 255, 147, 0, 150 //(purple)
- }; //end PurpleOrange_gp
- DEFINE_GRADIENT_PALETTE( GreenMint_gp ) {
- 0, 50, 205, 50, //lime green
- 110, 245, 255, 250, //mint cream
- 255, 50, 205, 50 //lime green
- }; //end GreenMint_gp
- DEFINE_GRADIENT_PALETTE( BlueWhiteYellow_gp ) {
- 0, 11, 2, 105, //Beast Blue
- 30, 11, 2, 105,
- 90, 200, 200, 180,
- 110, 200, 200, 180, //White
- 130, 200, 200, 180,
- 205, 255, 231, 0,
- 255, 255, 231, 0 //Belle Yellow
- }; //end BlueWhiteYellow_gp
- DEFINE_GRADIENT_PALETTE( RedYellowRed_gp ) {
- 0, 139, 0, 0, // Dark Red
- 60, 139, 0, 0,
- //100, 255, 231, 0,
- 120, 255, 231, 0,
- 130, 255, 231, 0, //Belle Yellow
- //120, 255, 231, 0,
- 195, 139, 0, 0,
- 255, 139, 0, 0 // Dark Red
- }; //end RedYellowRed_gp
- void setup() {
- delay(1000); //sanity delay
- Serial.begin(115200);
- // 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);
- FastLED.setTemperature(0xFF7029);
- encoder = new ClickEncoder(2, 3, 4);
- Timer1.initialize(1000);
- Timer1.attachInterrupt(timerIsr);
- last = 5;
- }//end of Setup
- // List of patterns to cycle through. Each is defined as a separate function below.
- typedef void (*SimplePatternList[])();
- SimplePatternList gPatterns = {
- Yellow,
- Red,
- PurpleOrange,
- GreenMint,
- BlueWhiteYellow,
- RedYellowRed,
- White,
- };
- // 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() {
- value += encoder->getValue();
- if (value != last) {
- last = value;
- if(value > 255)
- value = 255; //prevent encoder from exceeding 255
- if(value < 0)
- value = 0; //prevent encoder from going negative
- Serial.print("Brightness Level: ");
- Serial.println(value);
- static uint8_t BRIGHT = value;
- if (brightnessMode == true) {
- FastLED.setBrightness(value);
- }//end brightness mode
- else{
- if (last < value) {
- Serial.print("Current Pattern # ");
- Serial.print(value);
- gCurrentPatternNumber = (value);
- nextPattern();
- }
- else {
- Serial.print("Current Pattern # ");
- Serial.print(value);
- prevPattern();
- }
- }//end pattern mode
- }
- ClickEncoder::Button b = encoder->getButton();
- if (b != ClickEncoder::Open) {
- switch (b) {
- case ClickEncoder::Clicked:
- Serial.println("Button was clicked");
- brightnessMode = !brightnessMode;
- if (brightnessMode) {
- Serial.println("Knob now controls brightness");
- } else {
- Serial.println("Knob now controls color");
- }
- break;
- }
- }
- // 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);
- }//end of loop
- #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);
- gCurrentPatternNumber = (gCurrentPatternNumber + 1);
- if (gCurrentPatternNumber > ARRAY_SIZE(gPatterns)) {
- gCurrentPatternNumber = ARRAY_SIZE(gPatterns)+1;
- }
- }
- void prevPattern()
- {
- gCurrentPatternNumber = (gCurrentPatternNumber - 1);
- if (gCurrentPatternNumber > ARRAY_SIZE(gPatterns)) {
- gCurrentPatternNumber = ARRAY_SIZE(gPatterns)-1;
- }
- }
- //begin patterns
- void Red() {
- for(int i=0; i< NUM_LEDS; i++) {
- leds[i] = CRGB::Red;
- }
- for (uint16_t i = 0; i < NUM_LEDS; i++)
- {
- leds[i].r = dim8_video(leds[i].r);
- leds[i].g = dim8_video(leds[i].g);
- leds[i].b = dim8_video(leds[i].b);
- }
- } // end Red
- void Yellow() {
- for(int i=0; i< NUM_LEDS; i++) {
- leds[i] = CRGB::Yellow;
- }
- for (uint16_t i = 0; i < NUM_LEDS; i++)
- {
- leds[i].r = dim8_video(leds[i].r);
- leds[i].g = dim8_video(leds[i].g);
- leds[i].b = dim8_video(leds[i].b);
- }
- } // end Yellow
- void White() {
- for(int i=0; i< NUM_LEDS; i++) {
- leds[i] = CRGB::White;
- }
- for (uint16_t i = 0; i < NUM_LEDS; i++)
- {
- leds[i].r = dim8_video(leds[i].r);
- leds[i].g = dim8_video(leds[i].g);
- leds[i].b = dim8_video(leds[i].b);
- }
- } // end White
- void RedYellowRed(){
- CRGBPalette16 palette = RedYellowRed_gp;
- for (int i=0; i< NUM_LEDS; i++) {
- leds[i] = ColorFromPalette(palette, i*256/NUM_LEDS);
- }
- for (uint16_t i = 0; i < NUM_LEDS; i++)
- {
- leds[i].r = dim8_video(leds[i].r);
- leds[i].g = dim8_video(leds[i].g);
- leds[i].b = dim8_video(leds[i].b);
- }
- }//end RedYellowRed
- void BlueWhiteYellow(){
- CRGBPalette16 palette = BlueWhiteYellow_gp;
- for (int i=0; i< NUM_LEDS; i++) {
- leds[i] = ColorFromPalette(palette, i*256/NUM_LEDS);
- }
- for (uint16_t i = 0; i < NUM_LEDS; i++)
- {
- leds[i].r = dim8_video(leds[i].r);
- leds[i].g = dim8_video(leds[i].g);
- leds[i].b = dim8_video(leds[i].b);
- }
- }//end BlueWhiteYellow
- void PurpleOrange(){
- CRGBPalette16 palette = PurpleOrange_gp;
- for (int i=0; i< NUM_LEDS; i++) {
- leds[i] = ColorFromPalette(palette, i*256/NUM_LEDS);
- }
- for (uint16_t i = 0; i < NUM_LEDS; i++)
- {
- leds[i].r = dim8_video(leds[i].r);
- leds[i].g = dim8_video(leds[i].g);
- leds[i].b = dim8_video(leds[i].b);
- }
- }//end Purple Orange
- void GreenMint(){
- CRGBPalette16 palette = GreenMint_gp;
- for (int i=0; i< NUM_LEDS; i++) {
- leds[i] = ColorFromPalette(palette, i*256/NUM_LEDS);
- }
- for (uint16_t i = 0; i < NUM_LEDS; i++)
- {
- leds[i].r = dim8_video(leds[i].r);
- leds[i].g = dim8_video(leds[i].g);
- leds[i].b = dim8_video(leds[i].b);
- }
- }//end GreenMint
- void rainbow()
- {
- // FastLED's built-in rainbow generator
- fill_rainbow( leds, NUM_LEDS, 0, 255/NUM_LEDS );
- //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-1 );
- 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-1 )] |= CHSV(dothue, 200, 255);
- dothue += 32;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement