RGBLED
Библиотека для управления RGB светодиодом
Install / Use
/learn @GyverLibs/RGBLEDREADME
RGBLED
Библиотека для управления RGB светодиодом и работы с цветом
- Режимы RGB/HSV/Hue/Цветовая теплота
- Оптимизированные функции конвертации
- Квадратная гамма яркости
- Поддержка общего анода и катода
- Фейдер для плавной смены цвета, синхронный и асинхронный
Совместимость
Совместима со всеми Arduino платформами (используются Arduino-функции)
Содержание
<a id="usage"></a>
Использование
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();
}
<a id="versions"></a>
Версии
- v1.0
<a id="install"></a>
Установка
- Библиотеку можно найти по названию 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: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
<a id="feedback"></a>
Баги и обратная связь
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код
Related Skills
node-connect
351.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
