Библиотека для управления RGB светодиодом и работы с цветом
- Режимы RGB/HSV/Hue/Цветовая теплота
- Оптимизированные функции конвертации
- Квадратная гамма яркости
- Поддержка общего анода и катода
- Фейдер для плавной смены цвета, синхронный и асинхронный
Совместима со всеми Arduino платформами (используются Arduino-функции)
Библиотека разделена на два уровня:
RGBColorиHSVColor— хранение и преобразование цвета без привязки к устройствуRGBReact— базовый реактивный класс, который хранит текущийRGBColorи применяет его в наследникеRGBLED— драйвер физического RGB-светодиодаRGBFaderиTransition— асинхронные плавные переходы
Класс хранения HSV-цвета:
HSVColor();
HSVColor(uint8_t h, uint8_t s, uint8_t v);
uint8_t H;
uint8_t S;
uint8_t V;
// преобразование в RGB
RGBColor toRGB() const;
RGBColor toRGBFast() const;Класс хранения и преобразования RGB-цвета
RGBColor();
RGBColor(uint8_t r, uint8_t g, uint8_t b);
uint8_t R;
uint8_t G;
uint8_t B;// квадрат расстояния по RGBstaticuint32_tdistRGB2(const RGBColor& c1, const RGBColor& c2);
// точное расстояние по RGBstaticuint16_tdistRGB(const RGBColor& c1, const RGBColor& c2);
// приближённое расстояние по RGBstaticuint16_tdistRGBFast(const RGBColor& c1, const RGBColor& c2);
// круговая разница оттенковstaticuint8_tdistHue(const RGBColor& c1, const RGBColor& c2);uint32_ttoRGB24() const;
uint16_ttoRGB16() const;
HSVColor toHSV() const;Параметр bright изменяет компоненты самого RGBColor
// уменьшить яркость текущего цветаvoidfadeBlack(uint8_t bright);
// RGB888voidsetRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t bright = 255);
voidsetRGB(const RGBColor& rgb, uint8_t bright = 255);
// предустановленный цветvoidsetColor(RGBColor::Color color, uint8_t bright = 255);
// RGB888 HEX и RGB565voidsetRGB24(uint32_t col, uint8_t bright = 255);
voidsetRGB16(uint16_t col, uint8_t bright = 255);
voidsetRGB16Fast(uint16_t col, uint8_t bright = 255);
// радуга и цветовое колесоvoidsetRainbow(uint8_t col, uint8_t bright = 255);
voidsetRainbow16(uint16_t col, uint8_t bright = 255);
voidsetHue(uint8_t col, uint8_t bright = 255);
voidsetHue16(uint16_t col, uint8_t bright = 255);
// цветовая температураvoidsetKelvin(uint16_t K, uint8_t bright = 255);
voidsetKelvinFast(uint16_t K, uint8_t bright = 255);
// HSVvoidsetHSV(const HSVColor& hsv);
voidsetHSV(uint8_t h, uint8_t s, uint8_t v);
voidsetHSVFast(const HSVColor& hsv);
voidsetHSVFast(uint8_t h, uint8_t s, uint8_t v);static RGBColor fromRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t bright = 255);
static RGBColor fromColor(RGBColor::Color color, uint8_t bright = 255);
static RGBColor fromRGB24(uint32_t col, uint8_t bright = 255);
static RGBColor fromRGB16(uint16_t col, uint8_t bright = 255);
static RGBColor fromRGB16Fast(uint16_t col, uint8_t bright = 255);
static RGBColor fromRainbow(uint8_t col, uint8_t bright = 255);
static RGBColor fromRainbow16(uint16_t col, uint8_t bright = 255);
static RGBColor fromHue(uint8_t col, uint8_t bright = 255);
static RGBColor fromHue16(uint16_t col, uint8_t bright = 255);
static RGBColor fromKelvin(uint16_t K, uint8_t bright = 255);
static RGBColor fromKelvinFast(uint16_t K, uint8_t bright = 255);
static RGBColor fromHSV(uint8_t h, uint8_t s, uint8_t v);
static RGBColor fromHSV(const HSVColor& hsv);
static RGBColor fromHSVFast(uint8_t h, uint8_t s, uint8_t v);
static RGBColor fromHSVFast(const HSVColor& hsv);RGBColor color = RGBColor::fromColor(RGBColor::Red);Доступные значения:
RGBColor::White
RGBColor::Gray
RGBColor::LightGray
RGBColor::DarkGray
RGBColor::Black
RGBColor::Red
RGBColor::Green
RGBColor::Blue
RGBColor::Yellow
RGBColor::Cyan
RGBColor::Magenta
RGBColor::Orange
RGBColor::Pink
RGBColor::Brown
RGBColor::Purple
RGBColor::Violet
RGBColor::Indigo
RGBColor::Teal
RGBColor::Navy
RGBColor::Lime
RGBColor::Olive
RGBColor::Maroon
RGBColor::Gold
RGBColor::Coral
RGBColor::Salmon
RGBColor::Khaki
RGBColor::Turquoise
RGBColor::SkyBlue
RGBColor::SteelBlue
RGBColor::ChocolateБазовый класс для реактивных RGB-устройств. Хранит текущий RGBColor; все setter-ы применяют новый цвет через реализацию show() в наследнике.
// текущий сохранённый цветconst RGBColor& color() const;
// преобразование текущего цветаuint32_ttoRGB24() const;
uint16_ttoRGB16() const;
HSVColor toHSV() const;
// синхронный блокирующий переходvoidfadeTo(const RGBColor& to, uint16_t durationMs);
// изменить сохранённый цветvoidfadeBlack(uint8_t bright);
voidsetColor(const RGBColor& color);
voidsetColor(RGBColor::Color color);
voidsetRGB(uint8_t r, uint8_t g, uint8_t b);
voidsetRGB24(uint32_t col);
voidsetRGB16(uint16_t col);
voidsetRGB16Fast(uint16_t col);
voidsetRainbow(uint8_t col);
voidsetRainbow16(uint16_t col);
voidsetHue(uint8_t col);
voidsetHue16(uint16_t col);
voidsetKelvin(uint16_t K);
voidsetKelvinFast(uint16_t K);
voidsetHSV(const HSVColor& hsv);
voidsetHSV(uint8_t h, uint8_t s, uint8_t v);
voidsetHSVFast(const HSVColor& hsv);
voidsetHSVFast(uint8_t h, uint8_t s, uint8_t v);Setter-ы RGBReact не принимают яркость. Для RGBLED общая яркость регулируется отдельно через setBrightness() и не изменяет сохранённый color().
Класс управления физическим RGB-светодиодом, наследует RGBReact.
RGBLED(
uint8_t rpin,
uint8_t gpin,
uint8_t bpin,
conn_t com = COM_CATHODE
);
// установить общую яркость физического выхода// withGamma = true включает квадратную гаммуvoidsetBrightness(uint8_t bright, bool withGamma = true);
// включить и применить сохранённый цветvoidenable();
// выключить светодиод, сохранив цветvoiddisable();
// включить или выключитьvoidsetPower(bool power);
// светодиод включёнboolenabled() const;Общая яркость RGBLED применяется поверх сохранённого цвета и не изменяет его:
led.setRGB(255, 80, 20);
led.setBrightness(128);
const RGBColor& saved = led.color(); // по-прежнему 255, 80, 20Асинхронный плавный переход между цветами реактивного объекта:
RGBFader(RGBReact& rgb);
// начать переход к цвету за durationMs мсboolfadeTo(const RGBColor& to, uint16_t durationMs);
// вызывать в loop, вернёт true при окончании процессаbooltick();
// переход выполняетсяboolrunning() const;Асинхронный одноосевой 8-битный переход:
// начать переходboolstart(uint8_t from, uint8_t to, uint16_t durationMs);
// вызывать в loop, вернёт true на каждом выполненном шагеbooltick();
// получить текущее и целевое значениеuint8_tgetCurrent() const;
uint8_tgetTarget() const;
// переход выполняетсяboolrunning() const;#include<RGBColor.h>
RGBColor color(255, 100, 20);
HSVColor hsv = color.toHSV();
RGBColor red = RGBColor::fromColor(RGBColor::Red);
RGBColor wheel = RGBColor::fromHue(80);
RGBColor warm = RGBColor::fromKelvin(3200);#include<RGBLED.h>voidsetup() {
// на пинах 3,5,6, общий катодRGBLEDrgb(3, 5, 6); // по умолчанию// RGBLED rgb(3, 5, 6, RGBLED::COM_CATHODE);// на пинах 9,10,11, общий анодRGBLEDrgbAnode(9, 10, 11, RGBLED::COM_ANODE);
rgb.setRGB(123, 0, 12); // установить как RGBdelay(1000);
rgb.setRainbow(50); // установить как радуга 8 битdelay(1000);
rgb.setRGB24(0xaabb22); // установить как RGB888 HEXdelay(1000);
rgb.setColor(RGBColor::Blue); // установить из спискаdelay(1000);
// плавно привести к красному за 2 секунды (синхронно, блокирующий вызов)
rgb.fadeTo(RGBColor::fromRGB(50, 0, 0), 2000);
// плавно привести к розовому за 2 секунды (синхронно, блокирующий вызов)
rgb.fadeTo(RGBColor::fromColor(RGBColor::Pink), 1000);
}
voidloop() {
}#include<RGBLED.h>RGBLEDled(3, 5, 6);
RGBFader fader(led);
voidsetup() {
}
voidloop() {
// начать новый переход после завершения предыдущегоif (!fader.running()) {
fader.fadeTo(RGBColor::fromHue(random(0, 256)), 1000);
}
fader.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, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код