Skip to content

Instantly share code, notes, and snippets.

@jasoncoon
Created September 15, 2016 13:38
Show Gist options
  • Save jasoncoon/d54216fc8ce2eb0ecee87f8002d421c5 to your computer and use it in GitHub Desktop.
Save jasoncoon/d54216fc8ce2eb0ecee87f8002d421c5 to your computer and use it in GitHub Desktop.
Simple FastLED "sunrise" example that fades from black to red, orange, yellow, and white.
#include "FastLED.h"
// How many leds in your strip?
#define NUM_LEDS 60
// For led chips like Neopixels, which have a data line, ground, and power, you just
// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
#define DATA_PIN 3
#define CLOCK_PIN 13
// Define the array of leds
CRGB leds[NUM_LEDS];
void setup() {
// Uncomment/edit one of the following lines for your leds arrangement.
// FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
// FastLED.addLeds<APA104, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SM16716, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD8806, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<P9813, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<APA102, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<DOTSTAR, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<P9813, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
// FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
}
void loop() {
sunrise();
FastLED.show();
}
void sunrise() {
// total sunrise length, in minutes
static const uint8_t sunriseLength = 30;
// how often (in seconds) should the heat color increase?
// for the default of 30 minutes, this should be about every 7 seconds
// 7 seconds x 256 gradient steps = 1,792 seconds = ~30 minutes
static const uint8_t interval = (sunriseLength * 60) / 256;
// current gradient palette color index
static uint8_t heatIndex = 0; // start out at 0
// HeatColors_p is a gradient palette built in to FastLED
// that fades from black to red, orange, yellow, white
// feel free to use another palette or define your own custom one
CRGB color = ColorFromPalette(HeatColors_p, heatIndex);
// fill the entire strip with the current color
fill_solid(leds, NUM_LEDS, color);
// slowly increase the heat
EVERY_N_SECONDS(interval) {
// stop incrementing at 255, we don't want to overflow back to 0
if(heatIndex < 255) {
heatIndex++;
}
}
}
@TheGroundZero
Copy link

TheGroundZero commented Apr 7, 2022

Hi

I'm looking to set up a sunrise effect in FastLED via ESPHome.
Can I (and how would I) use this script somehow within ESPHome?

Kr

PS: can ColorFromPaletteExtended() (FastLED/FastLED#202) be integrated in this?

@ZimboPro
Copy link

COuld be a dumb question but how do i speed this up? i have changed sunrise length but i just see white

Setting the duration too low will cause interval to be 0 hence why immediately white. I suggest to just temporarily hardcode the interval to 1 if you want to speed it up. The full runtime will be about 4 min 16 secs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment