#define FASTLED_ALLOW_INTERRUPTS 0
#define DATA_PIN 3
#define NUM_LEDS 60
#define MAX_POWER_MILLIAMPS 500
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
void setup() {
delay( 3000);
}
void loop()
{
pacifica_loop();
}
}
{ 0x000507, 0x000409, 0x00030B, 0x00030D, 0x000210, 0x000212, 0x000114, 0x000117,
0x000019, 0x00001C, 0x000026, 0x000031, 0x00003B, 0x000046, 0x14554B, 0x28AA50 };
{ 0x000507, 0x000409, 0x00030B, 0x00030D, 0x000210, 0x000212, 0x000114, 0x000117,
0x000019, 0x00001C, 0x000026, 0x000031, 0x00003B, 0x000046, 0x0C5F52, 0x19BE5F };
{ 0x000208, 0x00030E, 0x000514, 0x00061A, 0x000820, 0x000927, 0x000B2D, 0x000C33,
0x000E39, 0x001040, 0x001450, 0x001860, 0x001C70, 0x002080, 0x1040BF, 0x2060FF };
void pacifica_loop()
{
static uint16_t sCIStart1, sCIStart2, sCIStart3, sCIStart4;
static uint32_t sLastms = 0;
uint32_t deltams = ms - sLastms;
sLastms = ms;
uint16_t speedfactor1 =
beatsin16(3, 179, 269);
uint16_t speedfactor2 =
beatsin16(4, 179, 269);
uint32_t deltams1 = (deltams * speedfactor1) / 256;
uint32_t deltams2 = (deltams * speedfactor2) / 256;
uint32_t deltams21 = (deltams1 + deltams2) / 2;
sCIStart1 += (deltams1 *
beatsin88(1011,10,13));
sCIStart2 -= (deltams21 *
beatsin88(777,8,11));
sCIStart3 -= (deltams1 *
beatsin88(501,5,7));
sCIStart4 -= (deltams2 *
beatsin88(257,4,6));
pacifica_one_layer( pacifica_palette_1, sCIStart1,
beatsin16( 3, 11 * 256, 14 * 256),
beatsin8( 10, 70, 130), 0-
beat16( 301) );
pacifica_one_layer( pacifica_palette_2, sCIStart2,
beatsin16( 4, 6 * 256, 9 * 256),
beatsin8( 17, 40, 80),
beat16( 401) );
pacifica_one_layer( pacifica_palette_3, sCIStart3, 6 * 256,
beatsin8( 9, 10,38), 0-
beat16(503));
pacifica_one_layer( pacifica_palette_3, sCIStart4, 5 * 256,
beatsin8( 8, 10,28),
beat16(601));
pacifica_add_whitecaps();
pacifica_deepen_colors();
}
void pacifica_one_layer(
CRGBPalette16& p, uint16_t cistart, uint16_t wavescale, uint8_t bri, uint16_t ioff)
{
uint16_t ci = cistart;
uint16_t waveangle = ioff;
uint16_t wavescale_half = (wavescale / 2) + 20;
for( uint16_t i = 0; i < NUM_LEDS; i++) {
waveangle += 250;
uint16_t s16 =
sin16( waveangle ) + 32768;
uint16_t cs =
scale16( s16 , wavescale_half ) + wavescale_half;
ci += cs;
uint16_t sindex16 =
sin16( ci) + 32768;
uint8_t sindex8 =
scale16( sindex16, 240);
leds[i] += c;
}
}
void pacifica_add_whitecaps()
{
uint8_t basethreshold =
beatsin8( 9, 55, 65);
uint8_t wave =
beat8( 7 );
for( uint16_t i = 0; i < NUM_LEDS; i++) {
uint8_t threshold =
scale8(
sin8( wave), 20) + basethreshold;
wave += 7;
if( l > threshold) {
uint8_t overage = l - threshold;
uint8_t overage2 =
qadd8( overage, overage);
leds[i] +=
CRGB( overage, overage2,
qadd8( overage2, overage2));
}
}
}
void pacifica_deepen_colors()
{
for( uint16_t i = 0; i < NUM_LEDS; i++) {
leds[i] |=
CRGB( 2, 5, 7);
}
}
CFastLED FastLED
Global LED strip management instance.
central include file for FastLED, defines the CFastLED class/object
void show(uint8_t scale)
Update all our controllers with the current led colors, using the passed in brightness.
void setMaxPowerInVoltsAndMilliamps(uint8_t volts, uint32_t milliamps)
Set the maximum power to be used, given in volts and milliamps.
static CLEDController & addLeds(CLEDController *pLed, struct CRGB *data, int nLedsOrOffset, int nLedsIfOffset=0)
Add a CLEDController instance to the world.
RGB color palette with 16 discrete values.
LIB8STATIC uint8_t beat8(accum88 beats_per_minute, uint32_t timebase=0)
Generates an 8-bit "sawtooth" wave at a given BPM.
LIB8STATIC uint16_t beatsin16(accum88 beats_per_minute, uint16_t lowest=0, uint16_t highest=65535, uint32_t timebase=0, uint16_t phase_offset=0)
Generates a 16-bit sine wave at a given BPM that oscillates within a given range.
LIB8STATIC uint16_t beat16(accum88 beats_per_minute, uint32_t timebase=0)
Generates a 16-bit "sawtooth" wave at a given BPM.
LIB8STATIC uint8_t beatsin8(accum88 beats_per_minute, uint8_t lowest=0, uint8_t highest=255, uint32_t timebase=0, uint8_t phase_offset=0)
Generates an 8-bit sine wave at a given BPM that oscillates within a given range.
LIB8STATIC uint16_t beatsin88(accum88 beats_per_minute_88, uint16_t lowest=0, uint16_t highest=65535, uint32_t timebase=0, uint16_t phase_offset=0)
Generates a 16-bit sine wave at a given BPM that oscillates within a given range.
@ TypicalLEDStrip
Typical values for SMD5050 LEDs.
void fill_solid(struct CRGB *targetArray, int numToFill, const struct CRGB &color)
Fill a range of LEDs with a solid color.
LIB8STATIC_ALWAYS_INLINE uint8_t qadd8(uint8_t i, uint8_t j)
Add one byte to another, saturating at 0xFF.
CRGB ColorFromPalette(const CRGBPalette16 &pal, uint8_t index, uint8_t brightness, TBlendType blendType)
Get a color from a palette.
@ LINEARBLEND
Linear interpolation between palette entries, with wrap-around from end to the beginning again.
LIB8STATIC uint16_t scale16(uint16_t i, fract16 scale)
Scale a 16-bit unsigned value by an 16-bit value, which is treated as the numerator of a fraction who...
LIB8STATIC_ALWAYS_INLINE uint8_t scale8(uint8_t i, fract8 scale)
Scale one byte by a second one, which is treated as the numerator of a fraction whose denominator is ...
#define GET_MILLIS
The a number of functions need access to a millisecond counter in order to keep time.
#define EVERY_N_MILLISECONDS(N)
Alias for EVERY_N_MILLIS.
#define sin16
Platform-independent alias of the fast sin implementation.
#define sin8
Platform-independent alias of the fast sin implementation.
#define FASTLED_USING_NAMESPACE
"Using" directive for the namespace
Representation of an RGB pixel (Red, Green, Blue)
uint8_t blue
Blue channel value.
FASTLED_FORCE_INLINE uint8_t getAverageLight() const
Get the average of the R, G, and B values.
uint8_t green
Green channel value.