#include "FastLED.h"
#define DATA_PIN 2
#define COLOR_ORDER GRB
#define NUM_LEDS 16
#define LED_TYPE WS2812B
#define MAXBRIGHTNESS 150
#define SPEED 10
#define ROWS 7
#define COLUMNS 3
#define RAINBOWLENGTH 23
CRGB leds[NUM_LEDS];
uint8_t randomsequence[][NUM_LEDS] = {{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}};
uint8_t rows[ROWS][COLUMNS] = {{15, 0, 1}, {14, 2}, {13, 3}, {12, 4}, {11, 5}, {10, 6}, {9, 8, 7}};
long colorpalette[] = {
0xFF0000,
0xFF4D00,
0xFF6F00,
0xFF9500,
0xFFBB00,
0xFFE100,
0xF7FF00,
0xD0FF00,
0xAEFF00,
0x88FF00,
0x00FF11,
0x00FF80,
0x00FFA6,
0x00FFCC,
0x00FFEE,
0x00EAFF,
0x00C4FF,
0x0051FF,
0x1E00FF,
0x9100FF,
0xB300FF,
0xD900FF,
0xFF00FF,
CRGB::White,
CRGB::Aqua,
CRGB::DarkOliveGreen,
CRGB::Teal,
CRGB::Navy,
CRGB::Fuchsia,
CRGB::Purple,
CRGB::Green,
CRGB::Gray,
CRGB::DeepPink,
CRGB::HotPink,
CRGB::SeaGreen,
CRGB::Pink,
CRGB::SeaGreen,
CRGB::MediumSpringGreen,
CRGB::GreenYellow,
CRGB::DarkGreen,
CRGB::Cyan,
CRGB::Gold,
CRGB::Chocolate,
CRGB::SandyBrown,
CRGB::Purple,
CRGB::ForestGreen,
CRGB::Magenta,
CRGB::Violet,
CRGB::SlateGray,
CRGB::Orange,
CRGB::AliceBlue,
CRGB::Maroon,
CRGB::Brown,
CRGB::LawnGreen
};
void setup() {
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setCorrection(TypicalLEDStrip);
FastLED.clear();
}
void loop() {
//fadecolor();
colorrain();
}
void colorrain() {
FastLED.clear();
FastLED.setBrightness(MAXBRIGHTNESS);
long color = colorpalette[micros() % (sizeof(colorpalette) / sizeof(colorpalette[0]))];
uint8_t sequence = millis() % 1;
for (uint8_t led = 0; led < NUM_LEDS; led++) {
for (uint8_t brightness = 0; brightness < MAXBRIGHTNESS; brightness = brightness + 10) {
leds[randomsequence[sequence][led]] = color;
FastLED.setBrightness(brightness);
FastLED.show();
delay(SPEED + 5);
}
for (uint8_t brightness = MAXBRIGHTNESS; brightness > 0; brightness = brightness - 10) {
leds[randomsequence[sequence][led]] = color;
FastLED.setBrightness(brightness);
FastLED.show();
delay(SPEED + 5);
}
leds[randomsequence[sequence][led]] = CRGB::Black;
delay(SPEED * 2);
}
FastLED.clear();
}