Skip to content

Repository files navigation

latestPIOFooFooFoo

Foo

RGBLED

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

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

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

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

Содержание

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

Библиотека разделена на два уровня:

  • RGBColor и HSVColor — хранение и преобразование цвета без привязки к устройству
  • RGBReact — базовый реактивный класс, который хранит текущий RGBColor и применяет его в наследнике
  • RGBLED — драйвер физического RGB-светодиода
  • RGBFader и Transition — асинхронные плавные переходы

HSVColor

Класс хранения 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;

RGBColor

Класс хранения и преобразования 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 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

RGBReact

Базовый класс для реактивных 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().

RGBLED

Класс управления физическим 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

Асинхронный плавный переход между цветами реактивного объекта:

RGBFader(RGBReact& rgb);
// начать переход к цвету за durationMs мсboolfadeTo(const RGBColor& to, uint16_t durationMs);
// вызывать в loop, вернёт true при окончании процессаbooltick();
// переход выполняетсяboolrunning() const;

Transition

Асинхронный одноосевой 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
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

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

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages