Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

latest PIO Foo Foo Foo

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;

Расстояние между цветами

// квадрат расстояния по RGB
static uint32_t distRGB2(const RGBColor& c1, const RGBColor& c2);

// точное расстояние по RGB
static uint16_t distRGB(const RGBColor& c1, const RGBColor& c2);

// приближённое расстояние по RGB
static uint16_t distRGBFast(const RGBColor& c1, const RGBColor& c2);

// круговая разница оттенков
static uint8_t distHue(const RGBColor& c1, const RGBColor& c2);

Получение значения

uint32_t toRGB24() const;
uint16_t toRGB16() const;
HSVColor toHSV() const;

Изменение цвета

Параметр bright изменяет компоненты самого RGBColor

// уменьшить яркость текущего цвета
void fadeBlack(uint8_t bright);

// RGB888
void setRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t bright = 255);
void setRGB(const RGBColor& rgb, uint8_t bright = 255);

// предустановленный цвет
void setColor(RGBColor::Color color, uint8_t bright = 255);

// RGB888 HEX и RGB565
void setRGB24(uint32_t col, uint8_t bright = 255);
void setRGB16(uint16_t col, uint8_t bright = 255);
void setRGB16Fast(uint16_t col, uint8_t bright = 255);

// радуга и цветовое колесо
void setRainbow(uint8_t col, uint8_t bright = 255);
void setRainbow16(uint16_t col, uint8_t bright = 255);
void setHue(uint8_t col, uint8_t bright = 255);
void setHue16(uint16_t col, uint8_t bright = 255);

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

// HSV
void setHSV(const HSVColor& hsv);
void setHSV(uint8_t h, uint8_t s, uint8_t v);
void setHSVFast(const HSVColor& hsv);
void setHSVFast(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_t toRGB24() const;
uint16_t toRGB16() const;
HSVColor toHSV() const;

// синхронный блокирующий переход
void fadeTo(const RGBColor& to, uint16_t durationMs);

// изменить сохранённый цвет
void fadeBlack(uint8_t bright);
void setColor(const RGBColor& color);
void setColor(RGBColor::Color color);
void setRGB(uint8_t r, uint8_t g, uint8_t b);
void setRGB24(uint32_t col);
void setRGB16(uint16_t col);
void setRGB16Fast(uint16_t col);
void setRainbow(uint8_t col);
void setRainbow16(uint16_t col);
void setHue(uint8_t col);
void setHue16(uint16_t col);
void setKelvin(uint16_t K);
void setKelvinFast(uint16_t K);
void setHSV(const HSVColor& hsv);
void setHSV(uint8_t h, uint8_t s, uint8_t v);
void setHSVFast(const HSVColor& hsv);
void setHSVFast(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 включает квадратную гамму
void setBrightness(uint8_t bright, bool withGamma = true);

// включить и применить сохранённый цвет
void enable();

// выключить светодиод, сохранив цвет
void disable();

// включить или выключить
void setPower(bool power);

// светодиод включён
bool enabled() const;

Общая яркость RGBLED применяется поверх сохранённого цвета и не изменяет его:

led.setRGB(255, 80, 20);
led.setBrightness(128);

const RGBColor& saved = led.color();  // по-прежнему 255, 80, 20

RGBFader

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

RGBFader(RGBReact& rgb);

// начать переход к цвету за durationMs мс
bool fadeTo(const RGBColor& to, uint16_t durationMs);

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

// переход выполняется
bool running() const;

Transition

Асинхронный одноосевой 8-битный переход:

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

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

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

// переход выполняется
bool running() 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>

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(RGBColor::Blue);  // установить из списка
    delay(1000);

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

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

void loop() {
}

Асинхронный фейдер

#include <RGBLED.h>

RGBLED led(3, 5, 6);
RGBFader fader(led);

void setup() {
}

void loop() {
    // начать новый переход после завершения предыдущего
    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

Watchers

Forks

Releases

Packages

Contributors

Languages