Библиотека для управления RGB светодиодами и лентами для Arduino. Облегчённая версия библиотеки GyverRGB
- Поддержка драйверов с общим анодом и общим катодом
- Настройка яркости
- Гамма-коррекция яркости (квадратный CRT)
- Библиотека может не привязываться к пинам и просто генерировать значения 8 бит
- Быстрые оптимизированные целочисленные вычисления (не везде)
- Плавный переход между любыми цветами (не блокирует выполнение кода)
- Установка цвета разными способами:
- RGB
- HSV
- Быстрый HSV
- Цветовое колесо (1530 значений)
- Цветовое колесо (255 значений)
- Теплота (1000-40000К)
- HEX цвета 24 бита
- HEX цвета 16 бит
- 17 предустановленных цветов
Совместима со всеми Arduino платформами (используются Arduino-функции)
- Библиотеку можно найти по названию GRGB и установить через менеджер библиотек в:
- 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: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
// указать тип драйвера COMMON_CATHODE/COMMON_ANODE
// и ШИМ пины (на которых работает analogWrite) в порядке R,G,B
GRGB led(COMMON_CATHODE, pinR, pinG, pinB);
// режим 10 бит ШИМ (для esp8266)
GRGB led(COMMON_CATHODE, pinR, pinG, pinB, GRGB_10BIT);
// виртуальный драйвер - пины не указываются
GRGB led(COMMON_CATHODE);
void enable(); // вкл
void disable(); // выкл
void setPower(bool power); // вкл/выкл
void setRGB(uint8_t r, uint8_t g, uint8_t b, uint8_t br = 255); // установить цвета r, g, b: 0-255 + опционально яркость
void setHSVfast(uint8_t h, uint8_t s, uint8_t v); // быстрый HSV
void setHSV(uint8_t h, uint8_t s, uint8_t v); // обычный HSV
void setWheel(int color, uint8_t br = 255); // цветовое колесо 0-1530 + опционально яркость
void setWheel8(uint8_t color, uint8_t br = 255); // цветовое колесо 0-255 + опционально яркость
void setKelvin(int kelvin, uint8_t br = 255); // цветовая температура 1000-40000К + опционально яркость
void setKelvinFast(int kelvin, uint8_t br = 255); // быстрое вычисление. Цветовая температура 1000-10000К + опционально яркость
void setHEX(uint32_t color, uint8_t br = 255); // HEX цвет 24 бита + опционально яркость
void setHEX16(uint32_t color, uint8_t br = 255); // HEX цвет 16 бит + опционально яркость
void setColor(uint32_t color, uint8_t br = 255); // цвет из предустановленных RGBCOLORS + опционально яркость
void setBrightness(uint8_t bri); // общая яркость 0-255
void setCRT(bool crt); // вкл/выкл гамма-коррекцию яркости
bool tick(); // тикер плавной смены цвета, вызывать как можно чаще если включен
void fadeMode(bool fade); // включение/выключение режима плавной смены цвета (по умолч. выкл)
void setFadePeriod(uint32_t fadeTime); // установить продолжительность смены цвета
void attach(void (*handler)()); // подключить коллбэк
void detach(); // отключить коллбэк
uint8_t R, G, B; // 8 бит сигналы для "виртуального" драйвера, обновляются после установки цвета
Остальные примеры смотри в examples!
#include <GRGB.h>
// указать тип драйвера COMMON_CATHODE/COMMON_ANODE
// и пины в порядке R,G,B
GRGB led(COMMON_CATHODE, 9, 10, 11);
void setup() {
// установить ОБЩУЮ яркость
led.setBrightness(255);
// включить гамма-коррекцию (по умолч. выключено)
led.setCRT(true);
//led.setCRT(false); // выключить
// установить цвет RGB [0-255]
led.setRGB(255, 0, 0);
//led.setRGB(255, 0, 0, 120); // + "локальная" яркость [0-255]
delay(1000);
// установить цвет HSV (цвет, насыщенность, яркость) [0-255]
led.setHSV(120, 200, 250);
delay(1000);
// установить цвет HSV быстрый алгоритм (цвет, насыщенность, яркость) [0-255]
led.setHSVfast(120, 200, 250);
delay(1000);
// установить цвет из цветового колеса [0-1530]
led.setWheel(800);
//led.setWheel(800, 120); // + "локальная" яркость [0-255]
delay(1000);
// установить цвет из цветового колеса [0-255]
led.setWheel8(120);
//led.setWheel8(120, 255); // + "локальная" яркость [0-255]
delay(1000);
// установить цветовую температуру [1000-40000] Кельвинов
led.setKelvin(5500);
//led.setKelvin(5500, 255); // + "локальная" яркость [0-255]
delay(1000);
// установить HEX цвет (24 бита)
led.setHEX(0x00FF00);
//led.setHEX(0x00FF00, 120); // + "локальная" яркость [0-255]
delay(1000);
// установить HEX цвет (16 бит)
led.setHEX16(0xF81F);
//led.setHEX16(0xF81F, 120); // + "локальная" яркость [0-255]
delay(1000);
// установить предустановленный цвет (16 бит)
led.setColor(GAqua); // список цветов в GRGB.h
//led.setColor(GAqua, 120); // + "локальная" яркость [0-255]
delay(1000);
}
void loop() {
// плавно мигаем яркостью
static uint32_t tmr;
if (millis() - tmr >= 5) {
tmr = millis();
static int8_t dir = 1;
static int val = 0;
val += dir;
if (val == 255 || val == 0) dir = -dir; // разворачиваем
led.setBrightness(val);
}
}
- v1.0
- v1.1 - добавлен setKelvinFast
- v1.2 - добавил псевдо 10 бит
- v1.2.1 - исправлен баг
- v1.3 - исправлена локальная яркость
- v1.3.1 - исправлена инверсия для 10 бит
- v1.4 - добавил enable(), disable() и setPower(bool)
- v1.4.1 - совместимость Digispark
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код