mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
93 lines
2.5 KiB
C
93 lines
2.5 KiB
C
|
|
#include "config.h"
|
|||
|
|
#define MATRIX_TYPE 0
|
|||
|
|
// #define NUM_LEDS LED_COUNT
|
|||
|
|
|
|||
|
|
// **************** НАСТРОЙКА МАТРИЦЫ ****************
|
|||
|
|
#if (CONNECTION_ANGLE == 0 && STRIP_DIRECTION == 0)
|
|||
|
|
#define _WIDTH WIDTH
|
|||
|
|
#define THIS_X x
|
|||
|
|
#define THIS_Y y
|
|||
|
|
|
|||
|
|
#elif (CONNECTION_ANGLE == 0 && STRIP_DIRECTION == 1)
|
|||
|
|
#define _WIDTH HEIGHT
|
|||
|
|
#define THIS_X y
|
|||
|
|
#define THIS_Y x
|
|||
|
|
|
|||
|
|
#elif (CONNECTION_ANGLE == 1 && STRIP_DIRECTION == 0)
|
|||
|
|
#define _WIDTH WIDTH
|
|||
|
|
#define THIS_X x
|
|||
|
|
#define THIS_Y (HEIGHT - y - 1)
|
|||
|
|
|
|||
|
|
#elif (CONNECTION_ANGLE == 1 && STRIP_DIRECTION == 3)
|
|||
|
|
#define _WIDTH HEIGHT
|
|||
|
|
#define THIS_X (HEIGHT - y - 1)
|
|||
|
|
#define THIS_Y x
|
|||
|
|
|
|||
|
|
#elif (CONNECTION_ANGLE == 2 && STRIP_DIRECTION == 2)
|
|||
|
|
#define _WIDTH WIDTH
|
|||
|
|
#define THIS_X (WIDTH - x - 1)
|
|||
|
|
#define THIS_Y (HEIGHT - y - 1)
|
|||
|
|
|
|||
|
|
#elif (CONNECTION_ANGLE == 2 && STRIP_DIRECTION == 3)
|
|||
|
|
#define _WIDTH HEIGHT
|
|||
|
|
#define THIS_X (HEIGHT - y - 1)
|
|||
|
|
#define THIS_Y (WIDTH - x - 1)
|
|||
|
|
|
|||
|
|
#elif (CONNECTION_ANGLE == 3 && STRIP_DIRECTION == 2)
|
|||
|
|
#define _WIDTH WIDTH
|
|||
|
|
#define THIS_X (WIDTH - x - 1)
|
|||
|
|
#define THIS_Y y
|
|||
|
|
|
|||
|
|
#elif (CONNECTION_ANGLE == 3 && STRIP_DIRECTION == 1)
|
|||
|
|
#define _WIDTH HEIGHT
|
|||
|
|
#define THIS_X y
|
|||
|
|
#define THIS_Y (WIDTH - x - 1)
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
#define _WIDTH WIDTH
|
|||
|
|
#define THIS_X x
|
|||
|
|
#define THIS_Y y
|
|||
|
|
#pragma message "Wrong matrix parameters! Set to default"
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// получить номер пикселя в ленте по координатам
|
|||
|
|
uint16_t getPixelNumber(int8_t x, int8_t y)
|
|||
|
|
{
|
|||
|
|
if ((THIS_Y % 2 == 0) || MATRIX_TYPE)
|
|||
|
|
{ // если чётная строка
|
|||
|
|
return (THIS_Y * _WIDTH + THIS_X);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{ // если нечётная строка
|
|||
|
|
return (THIS_Y * _WIDTH + _WIDTH - THIS_X - 1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// функция отрисовки точки по координатам X Y
|
|||
|
|
void drawPixelXY(int8_t x, int8_t y, CRGB color)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if (x < 0 || x > WIDTH - 1 || y < 0 || y > HEIGHT - 1)
|
|||
|
|
return;
|
|||
|
|
int thisPixel = getPixelNumber(x, y) * SEGMENTS;
|
|||
|
|
for (byte i = 0; i < SEGMENTS; i++)
|
|||
|
|
{
|
|||
|
|
leds[thisPixel + i] = color;
|
|||
|
|
}
|
|||
|
|
//FastLED.show();
|
|||
|
|
}
|
|||
|
|
// функция получения цвета пикселя по его номеру
|
|||
|
|
uint32_t getPixColor(int thisSegm)
|
|||
|
|
{
|
|||
|
|
int thisPixel = thisSegm * SEGMENTS;
|
|||
|
|
if (thisPixel < 0 || thisPixel > NUM_LEDS - 1)
|
|||
|
|
return 0;
|
|||
|
|
return (((uint32_t)leds[thisPixel].r << 16) | ((long)leds[thisPixel].g << 8) | (long)leds[thisPixel].b);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// функция получения цвета пикселя в матрице по его координатам
|
|||
|
|
uint32_t getPixColorXY(int8_t x, int8_t y)
|
|||
|
|
{
|
|||
|
|
return getPixColor(getPixelNumber(x, y));
|
|||
|
|
}
|