ОБНОВЛЕНИЯ
Версия 1.17 от 11.03.2020
— Добавлена перегруженная setHEX
Версия 1.13 от 08.06.2019
— Добавлен режим с настройкой частоты ШИМ
— Добавлена матрица коррекции LUT
— Добавлено коррекция по минимальному сигналу ШИМ
— Добавлена гамма-коррекция яркости
Версия 1.14 от 09.09.2019
— Убраны дефайны
Версия 1.15 от 16.09.2019
— Возвращены дефайны
Версия 1.16 от 15.12.2019
— Исправлен баг в fadeTo
ТЕОРИЯ
RGB светодиод или лента – очень крутая штука, ведь используя даже 8-ми битный ШИМ (0-255) мы можем получить 16.7 миллионов цветов и оттенков! Рассмотрим подключение светодиодов и лент к Arduino.
На сайте есть супер подробный урок по управлению RGB светодиодами и лентами, изучите его.
БИБЛИОТЕКА
Мощная библиотека для удобного управления RGB светодиодами и лентами для Arduino
- 1530 значений для colorWheel
- Работа в пространстве RGB
- Работа в пространстве HSV
- Установка цвета в формате HEX
- Установка цветовой температуры
- 16 предустановленных цветов
- Настройка полярности ШИМ
- Функция плавной смены цвета
- Ограничение тока (по расчёту)
- Регулировка общей яркости
- Поддержание яркости LED ленты по мере разряда АКБ
- Возможность управления 6-ю RGB диодами/лентами с одной Arduino (встроенный генератор ШИМ на ВСЕХ 20 пинах atmega328)
- Режим с настройкой частоты ШИМ
- Матрица коррекции LUT
- Коррекция по минимальному сигналу ШИМ
- CRT гамма-коррекция яркости
Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)
УСТАНОВКА
- Про ручную установку читай здесь
ДОКУМЕНТАЦИЯ
// объявление GRGB(uint8_t rpin, uint8_t gpin, uint8_t bpin); // объявление с выбором режима генерации ШИМ (NORM_PWM / ANY_PWM) // NORM_PWM - дефолтные ШИМ пины (3, 5, 6, 9, 10, 11 для UNO/NANO/MINI) // ANY_PWM - любой пин делается ШИМ пином (частота ~150 Гц). Подробности в библиотеке GyverHacks GRGB(uint8_t rpin, uint8_t gpin, uint8_t bpin, boolean pwmmode); void highFrequency(long frequency); // режим работы на высокой частоте ШИМ (указать в Герцах). Работает с библиотекой PWM.h void setDirection(uint8_t direction); // NORMAL / REVERSE - направление ШИМ // общий катод - NORMAL // общий анод - REVERSE void setMaxCurrent(uint16_t numLeds, float vcc, int maxCur); // установка ограничения по току: количество светодиодов, напряжение питания в милливольтах, максимальный ток void setBrightness(byte bright); // установка яркости (0-255) void setGammaBright(boolean val); // вкл/выкл коррекции яркости void setMinPWM(byte val); // минимальный сигнал PWM void setLUT(float rc, float gc, float bc); // установка коррекции цвета (матрица LUT) void constantBrightTick(int minVolts, int vcc); // корректировка под напряжение питания void gammaTick(int vcc); // корректировка красного цвета при падении напряжения питания void setHEX(colors color); // установка цвета в формате HEX (вида 0x808080 ) void setRGB(uint8_t r, uint8_t g, uint8_t b); // установка цвета в пространстве RGB (каждый цвет 0-255) void setHSV(uint8_t h, uint8_t s, uint8_t v); // установка цвета в пространстве HSV (каждая велиична 0-255) void setHSV_fast(uint8_t h, uint8_t s, uint8_t v); // более быстрый, но менее красивый вариант предыдущей функции void setKelvin(int16_t temperature); // установить цвет как температуру в Кельвинах (от 1000 до 10'000 - от красного к синему) void colorWheel(int color); // установить цвет (0 - 1530). Максимально широкая палитра ярких цветов (смеси RGB) void fadeTo(colors newColor, uint16_t fadeTime); // плавно изменить текущий цвет к новому за вермя fadeTime в миллисекундах для HEX цвета void fadeTo(uint8_t new_r, uint8_t new_g, uint8_t new_b, uint16_t fadeTime); // для R G B
ПРИМЕРЫ
Остальные примеры смотри в папке examples библиотеки, также примеры можно открыть из Arduino IDE/Файл/Примеры
/* Пример управления цветом RGB светодиода одним потенциометром Потенциометр подключен к А0 Светодиод/мосфеты подключены к ШИМ пинам! Для УНО и НАНО это 3, 5, 6, 9, 10, 11 */ #include "GyverRGB.h" GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B) void setup() { } void loop() { byte H = analogRead(0) / 4; // получаем 0-255 // меняем только цвет. Яркость и насыщенность вручную diode.setHSV(H, 255, 255); }
#include "GyverRGB.h" GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B) void setup() { } void loop() { byte R = analogRead(0) / 4; byte G = analogRead(1) / 4; byte B = analogRead(2) / 4; diode.setRGB(R, G, B); }
/* Пример управления RGB светодиодом плавная установка цвета Для УНО и НАНО это 3, 5, 6, 9, 10, 11 */ #include "GyverRGB.h" GRGB diode(6, 5, 3); // куда подключены цвета (R, G, B) /* Доступные цвета для fadeTo (HEX) WHITE // белый SILVER // серебро GRAY // серый BLACK // чёрный RED // красный MAROON // бордовый YELLOW // жёлтый OLIVE // олива LIME // лайм GREEN // зелёный AQUA // аква TEAL // цвет головы утки чирка https://odesign.ru/teal-color/ BLUE // голубой NAVY // тёмно-синий PINK // розовый PURPLE // пурпурный */ void setup() { } void loop() { diode.fadeTo(RED, 500); diode.fadeTo(BLACK, 500); diode.fadeTo(LIME, 500); diode.fadeTo(BLACK, 500); diode.fadeTo(BLUE, 500); diode.fadeTo(BLACK, 500); }
/* Демонстрация работы метода colorWheel, который устанавливает цвет по значениям 0-1530, делая плавный переход красный-зелёный-синий-красный Откройте монитор/плоттер для наглядного представления алгоритма */ #include "GyverRGB.h" GRGB diode(5, 6, 9); // куда подключены цвета (R, G, B) void setup() { Serial.begin(9600); } void loop() { diode.colorWheel(map(analogRead(0), 0, 1023, 0, 1530)); Serial.println( String(diode.showR) + " " + String(diode.showG) + " " + String(diode.showB)); delay(20); }
ПОДДЕРЖАТЬ
Вы можете поддержать меня за создание доступных проектов с открытым исходным кодом, полный список реквизитов есть вот здесь.