#include <FastLED.h>
#define WIDTH 32 //Ширина матрицы
#define HEIGHT 16 //Высота матрицы
#define LED_PIN 13 //Пин подключения матрицы на ардуино
#define BRT_PIN A0 //Пин подключения потенциометра на ардуино
#define NUM_LEDS (WIDTH * HEIGHT) //Общее количество светодиодов
CRGB leds[NUM_LEDS]; //Массив для светодиодов
unsigned char old_brightness = 0; //Яркость
unsigned char r, g, b, start;
void setup() {
FastLED.addLeds<WS2811, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(analogRead(BRT_PIN) * 0.25);
Serial.begin(1000000);
for (char i = 0; i < HEIGHT; i++) { //Очистка матрицы
for (char j = 0; j < WIDTH; j++) {
leds[XY(i, j)] = CRGB(0, 0, 0);
}
}
FastLED.show();
}
int XY(char x, char y) { //Функция преобразования координат
if (y % 2 == 0)
return (y * HEIGHT + (HEIGHT - x - 1));
return (y * HEIGHT + x);
}
void NewBrightness() { //Изменение яркости
unsigned char new_brightness = analogRead(BRT_PIN) * 0.25;
if (abs(new_brightness - old_brightness) > 3) {
FastLED.setBrightness(new_brightness);
old_brightness = new_brightness;
FastLED.show();
}
}
void loop() {
NewBrightness();
while (!Serial.available()); //Проверка начала кадра
start = Serial.read();
if (start != 201)
return;
for (char q = 0; q < HEIGHT; q++) { //Считывание кадра
for (char w = 0; w < WIDTH; w++) {
while (!Serial.available());
r = Serial.read();
while (!Serial.available());
g = Serial.read();
while (!Serial.available());
b = Serial.read();
leds[XY(q, w)] = CRGB(r, g, b);
}
}
FastLED.show();
Serial.print(6); //Проверка конца кадра
}