#include "FastLED.h"
// Matrix size
#define HEIGHT 17
#define WIDTH 17
#define NUM_LEDS WIDTH * HEIGHT
#define MATRIX_TYPE 1
// LEDs pin
#define DATA_PIN 3
// LED brightness
#define BRIGHTNESS 255
// Define the array of leds
CRGB leds[NUM_LEDS];
//// ----------------------------- SolarSystem ------------------------------
//(c)stepko
#define CENTER_X WIDTH/2
#define CENTER_Y HEIGHT/2
#define LIGHTERS_AM (WIDTH+HEIGHT)/4
byte lightersColor[LIGHTERS_AM];
byte loopCounter;
int angle[LIGHTERS_AM];
int8_t angleSpeed[LIGHTERS_AM];
bool loadingFlag = true;
uint8_t scale = 16;
void SolarSystem() {
if (loadingFlag) {
loadingFlag = false;
randomSeed(millis());
for (byte i = 0; i < LIGHTERS_AM; i++) {
lightersColor[i] = random(0, 9) * 28;
angle[i] = random(0, 360);
angleSpeed[i] = 1 + i * random(0, 2) - 1;
}
}
fadeToBlackBy (leds, NUM_LEDS, 10);
//FastLED.clear();
for (byte i = 0; i < map(scale, 1, 16, 1, LIGHTERS_AM); i++) {
angle[i] += angleSpeed[i];
if (angle[i] > 360) angle[i] = 360 - angle[i];
if (angle[i] < 0) angle[i] = angle[i];
leds[XY(CENTER_X + sin(radians(angle[i]))* angleSpeed[i], CENTER_Y + cos(radians(angle[i]))* angleSpeed[i])] = CHSV(lightersColor[i] + 128, 255, 255);
/* EVERY_N_SECONDS(random(10,20)){
angleSpeed[i] = random(-10, 10);
}*/
}
}
void setup() {
Serial.begin(250000);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
}
void loop() {
SolarSystem();
FastLED.show();
static int frame = 0;
if (frame++ % 32 == 0)
Serial.println(FastLED.getFPS());
} //loop
uint16_t XY (uint8_t x, uint8_t y) {
if ((y % 2 == 0) || MATRIX_TYPE) // if steam line
{
return ((uint32_t)y * WIDTH + x) % (WIDTH * HEIGHT);
}
else // if not steam line
{
return ((uint32_t)y * WIDTH + WIDTH - x - 1) % (WIDTH * HEIGHT);
}
}