Skip to content

GyverLibs/RGBLED

Repository files navigation

latest PIO Foo Foo Foo

Foo

RGBLED

Библиотека для управления RGB светодиодом и работы с цветом

  • Режимы RGB/HSV/Hue/Цветовая теплота
  • Оптимизированные функции конвертации
  • Квадратная гамма яркости
  • Поддержка общего анода и катода
  • Фейдер для плавной смены цвета, синхронный и асинхронный

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Использование

RGB

Базовый класс с конвертацией и установкой цветов

// =================== STATIC ===================

// уменьшить яркость
static uint8_t fade8(uint8_t x, uint8_t bright);

// квадратная гамма
static uint8_t sqGamma(uint8_t x);

// кубическая гамма
static uint8_t cubeGamma(uint8_t x);

static uint32_t makeRGB24(uint8_t r, uint8_t g, uint8_t b);

static uint32_t makeRGB16(uint8_t r, uint8_t g, uint8_t b);

// =================== GETTER ===================

// вывести как 24-бит RGB
uint32_t toRGB24();

// вывести как 16-бит RGB
uint16_t toRGB16();

// =================== UTIL ===================

// плавно изменить цвет к to за durationMs мс
void fadeTo(const RGB& to, uint16_t durationMs);

// понизить яркость (чем меньше значение, тем ниже яркость)
void fadeBlack(uint8_t bright);

// =================== SETTER ===================

// RGB888
virtual void setRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t bright = 255);

// RGB
void setFrom(const RGB_t& rgb, uint8_t bright = 255);

// RGB::Color
void setColor(Color color, uint8_t bright = 255);

// RGB888
void setRGB24(uint32_t col, uint8_t bright = 255);

// RGB565 полная конвертация (медленнее)
void setRGB16(uint16_t col, uint8_t bright = 255);

// RGB565 быстрая конвертация с потерей точности
void setRGB16Fast(uint16_t col, uint8_t bright = 255);

// радуга 8 бит (более красивая версия setHue)
void setRainbow(uint8_t col, uint8_t bright = 255);

// радуга 16 бит (реальный шаг - 100 единиц)
void setRainbow16(uint16_t col, uint8_t bright = 255);

// цветовое колесо 8 бит
void setHue(uint8_t col, uint8_t bright = 255);

// цветовое колесо 16 бит (реальный шаг - 43 единицы)
void setHue16(uint16_t col, uint8_t bright = 255);

// цветовая температура 1000-10000К
void setKelvin(uint16_t K, uint8_t bright = 255);

// цветовая температура 1000-10000К, быстрый алгоритм
void setKelvinFast(uint16_t K, uint8_t bright = 255);

// HSV
void setHSV(uint8_t h, uint8_t s, uint8_t v);

// HSV, быстрый алгоритм
void setHSVFast(uint8_t h, uint8_t s, uint8_t v);

// ================== FABRIC ==================

static RGB fromRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t bright = 255);
static RGB fromColor(Color color, uint8_t bright = 255);
static RGB fromRGB24(uint32_t col, uint8_t bright = 255);
static RGB fromRGB16(uint16_t col, uint8_t bright = 255);
static RGB fromRGB16Fast(uint16_t col, uint8_t bright = 255);
static RGB fromRainbow(uint8_t col, uint8_t bright = 255);
static RGB fromRainbow16(uint16_t col, uint8_t bright = 255);
static RGB fromHue(uint8_t col, uint8_t bright = 255);
static RGB fromHue16(uint16_t col, uint8_t bright = 255);
static RGB fromKelvin(uint16_t K, uint8_t bright = 255);
static RGB fromKelvinFast(uint16_t K, uint8_t bright = 255);
static RGB fromHSV(uint8_t h, uint8_t s, uint8_t v);
static RGB fromHSVFast(uint8_t h, uint8_t s, uint8_t v);

RGB::Color

Набор предустановленных цветов

White = 0xFFFFFF,
Gray = 0x808080,
LightGray = 0xD3D3D3,
DarkGray = 0xA9A9A9,
Black = 0x000000,
Red = 0xFF0000,
Green = 0x00FF00,
Blue = 0x0000FF,
Yellow = 0xFFFF00,
Cyan = 0x00FFFF,
Magenta = 0xFF00FF,
Orange = 0xFFA500,
Pink = 0xFFC0CB,
Brown = 0xA52A2A,
Purple = 0x800080,
Violet = 0xEE82EE,
Indigo = 0x4B0082,
Teal = 0x008080,
Navy = 0x000080,
Lime = 0x32CD32,
Olive = 0x808000,
Maroon = 0x800000,
Gold = 0xFFD700,
Coral = 0xFF7F50,
Salmon = 0xFA8072,
Khaki = 0xF0E68C,
Turquoise = 0x40E0D0,
SkyBlue = 0x87CEEB,
SteelBlue = 0x4682B4,
Chocolate = 0xD2691E

RGB::Fader

Асинхронный фейдер (плавный переход между цветами)

Fader(RGB& rgb);

// плавно изменить цвет к to за durationMs мс
bool fadeTo(const RGB& to, uint16_t durationMs);

// вызывать в loop. Вернёт true при окончании процесса
bool tick();

// цвет в процессе изменения
bool running();

Transition

"Одноосевой" 8 бит фейдер

// начать переход
bool start(uint8_t from, uint8_t to, uint16_t durationMs);

// вызывать в loop. Вернёт true на каждом шаге, если запущен
bool tick();

// получить текущее значение
uint8_t getCurrent();

// получить целевое значение
uint8_t getTarget();

// в процессе изменения
bool running();

RGBLED

Класс для управления физическим светодиодом, наследует RGB

RGBLED(uint8_t rpin, uint8_t gpin, uint8_t bpin, bool com = COM_CATHODE);

// установить и применить яркость
void setBrightness(uint8_t bright);

// обновить цвет
void show();

// вкл
void enable();

// выкл
void disable();

// вкл/выкл
void setPower(bool power);

Примеры

Демо

#include <RGBLED.h>

void setup() {
    // на пинах 3,5,6, общий катод
    RGBLED rgb(3, 5, 6);  // по умолчанию
    // RGBLED rgb(3, 5, 6, RGBLED::COM_CATHODE);

    // на пинах 9,10,11, общий анод
    RGBLED rgbAnode(9, 10, 11, RGBLED::COM_ANODE);

    rgb.setRGB(123, 0, 12);  // установить как RGB
    delay(1000);

    rgb.setRainbow(50);  // установить как радуга 8 бит
    delay(1000);

    rgb.setRGB24(0xaabb22);  // установить как RGB888 HEX
    delay(1000);

    rgb.setColor(RGB::Color::Blue);  // установить из списка
    delay(1000);

    // плавно привести к красному за 2 секунды (синхронно, блокирующий вызов)
    rgb.fadeTo(RGB::fromRGB(50, 0, 0), 2000);

    // плавно привести к розовому за 2 секунды (синхронно, блокирующий вызов)
    rgb.fadeTo(RGB::fromColor(RGB::Color::Pink), 1000);
}

void loop() {
}

Фейдер

#include <RGBLED.h>

RGBLED rgb(3, 5, 6);
RGB::Fader f(rgb);

void setup() {
}

void loop() {
    // асинхронно переходить на случайный цвет из Hue, когда предыдущий переход закончился
    if (!f.running()) f.fadeTo(RGB::fromHue(random(0, 256)), 1000);
    f.tick();
}

Версии

  • v1.0

Установка

  • Библиотеку можно найти по названию RGBLED и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту [email protected]
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для управления RGB светодиодом

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •  

Languages