#include "FastLED.h"
const uint8_t BorderWidth = 1U;
bool loadingFlag = true;
#define MC_PAINTBALL = 4;
#define COLOR_ORDER GRB; // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB
#define WIDTH 16 // ширина матрицы
#define HEIGHT 16 // высота матрицы
#define SEGMENTS 1 // диодов в одном "пикселе" (для создания матрицы из кусков ленты)
#define NUM_LEDS WIDTH * HEIGHT * SEGMENTS
CRGB leds[NUM_LEDS];
#define DATA_PIN 23;
#define BRIGHTNESS 32; // стандартная маскимальная яркость (0-255)
byte globalBrightness = BRIGHTNESS;
#define MC_DAWN_ALARM_SPIRAL 253; // Специальный режим, вызывается из DEMO_DAWN_ALARM для ламп на круговой матрице - огонек по спирали
#define MC_DAWN_ALARM_SQUARE 254; // Специальный режим, вызывается из DEMO_DAWN_ALARM для плоских матриц - огонек по спирали на плоскости матрицы
byte modeCode;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
//Serial.println("Hello, ESP32!");
// настройки ленты
FastLED.addLeds<WS2812, DATA_PIN>(leds, NUM_LEDS);
FastLED.setBrightness(globalBrightness);
if (CURRENT_LIMIT > 0) FastLED.setMaxPowerInVoltsAndMilliamps(5, CURRENT_LIMIT);
FastLED.clear();
FastLED.show();
randomSeed(analogRead(0) ^ millis()); // пинаем генератор случайных чисел
}
// Trivial XY function for the SmartMatrix; use a different XY
// function for different matrix grids. See XYMatrix example for code.
uint16_t XY(uint8_t x, uint8_t y)
{
uint16_t i;
uint8_t reverse;
if (WIDTH >= HEIGHT) {
if (y & 0x01)
{
// Odd rows run backwards
reverse = (WIDTH - 1) - x;
i = (y * WIDTH) + reverse;
}
else
{
// Even rows run forwards
i = (y * WIDTH) + x;
}
} else {
if (x & 0x01)
{
// Odd rows run backwards
reverse = (HEIGHT - 1) - y;
i = (x * HEIGHT) + reverse;
}
else
{
// Even rows run forwards
i = (x * HEIGHT) + y;
}
}
return i;
}
void lightBallsRoutine() {
if (loadingFlag) {
loadingFlag = false;
modeCode = MC_PAINTBALL;
FastLED.clear(); // очистить
}
// Apply some blurring to whatever's already on the matrix
// Note that we never actually clear the matrix, we just constantly
// blur it repeatedly. Since the blurring is 'lossy', there's
// an automatic trend toward black -- by design.
uint8_t blurAmount = dim8_raw(beatsin8(3,64,100));
blur2d(leds, WIDTH, HEIGHT, blurAmount);
// Use two out-of-sync sine waves
uint8_t i = beatsin8( 91, BorderWidth, maxDim-BorderWidth);
uint8_t j = beatsin8( 109, BorderWidth, maxDim-BorderWidth);
uint8_t k = beatsin8( 73, BorderWidth, maxDim-BorderWidth);
uint8_t m = beatsin8( 123, BorderWidth, maxDim-BorderWidth);
// The color of each point shifts over time, each at a different speed.
uint32_t ms = millis();
int16_t idx, wh = WIDTH * HEIGHT;
byte cnt = map(255-effectScaleParam[MC_PAINTBALL],0,255,1, 5);
if (cnt <= 1) { idx = XY(i, j); if (idx < wh) leds[idx] += CHSV( ms / 29, 200U, 255U); }
if (cnt <= 2) { idx = XY(j, k); if (idx < wh) leds[idx] += CHSV( ms / 41, 200U, 255U); }
if (cnt <= 3) { idx = XY(k, m); if (idx < wh) leds[idx] += CHSV( ms / 73, 200U, 255U); }
if (cnt <= 4) { idx = XY(m, i); if (idx < wh) leds[idx] += CHSV( ms / 97, 200U, 255U); }
}
void loop() {
// put your main code here, to run repeatedly:
lightBallsRoutine();
delay(1); // this speeds up the simulation
}