Управление цветом светодиода RGB с одним значением
В таких приложениях, как Photoshop, есть один ползунок для выбора цвета: .
Я хотел бы добиться того же, используя ручку переменного сопротивления в качестве ползунка для управления цветом светодиода RGB. Может ли кто-нибудь направить меня на правильный путь, как линейно отображать значения цвета?
@wilkas, 👍0
Обсуждение1 ответ
Лучший ответ:
Вы управляете одним из трех значений цветового пространства HSV (он же HSB).
Цвет может быть представлен различными способами, которые называются пробелами. Монитор вашего компьютера отображает цвет в цветовом пространстве RGB - красный, зеленый и синий. Светодиод RGB, конечно же, также отображается в цветовом пространстве RGB. Ваш цветной принтер работает в цветовом пространстве CMYK.
Разные цветовые пространства представляют цвет с использованием разных значений и комбинаций значений, и используемое вами цветовое пространство может быть наложено техническими ограничениями (например, в принтере оно определяется комбинацией цветов чернил).
HSV – это удобный способ визуального управления цветом, так как он позволяет легко понять "Оттенок" (цвет), "Насыщенность" (насколько насыщен цвет) и "Значение" (или "Яркость" – насколько светлым является цвет). ) значения, понятные человеку.
Однако физические устройства, как правило, не работают с этим цветовым пространством, поэтому вам необходимо иметь возможность перевода между ними.
Вы можете думать о HSV как о "человеческом" цветовом пространстве, а о RGB как о "цифровом" цветовом пространстве.
К счастью, преобразовать одно в другое относительно просто, и в Интернете есть несколько фрагментов кода, которые дают примеры того, как это сделать.
Я собираюсь включить сюда один, который я использую в моей библиотеке TFT-дисплеев chipKIT "Cariad". Учитывая три 8-битных значения (0-255) «hue», «sat» и «val», он вычислит значения красного, зеленого и синего. «оттенок» — это тот, который вы меняете с помощью своего горшка — другие могут быть статическими значениями (или вы можете добавить больше горшков, чтобы контролировать и их).
unsigned int H_accent = hue/43;
unsigned int bottom = ((255 - sat) * val)>>8;
unsigned int top = val;
unsigned char rising = ((top-bottom) *(hue%43 ) ) / 43 + bottom;
unsigned char falling = ((top-bottom) *(43-hue%43) ) / 43 + bottom;
int r = 0;
int g = 0;
int b = 0;
switch(H_accent) {
case 0:
r = top;
g = rising;
b = bottom;
break;
case 1:
r = falling;
g = top;
b = bottom;
break;
case 2:
r = bottom;
g = top;
b = rising;
break;
case 3:
r = bottom;
g = falling;
b = top;
break;
case 4:
r = rising;
g = bottom;
b = top;
break;
case 5:
r = top;
g = bottom;
b = falling;
break;
}
if (r > 255) r = 255;
if (g > 255) g = 255;
if (b > 255) b = 255;
if (r < 0) r = 0;
if (g < 0) g = 0;
if (b < 0) b = 0;
Каковы диапазоны значений «hue», «sat» и «val» в этом скрипте? Это 0-128?, @wilkas
0-255 полный 8-битный диапазон, @Majenko
Работает как шарм. Я блуждаю, почему цвета выглядят по-разному, когда плата Arduino питается через USB и через подключение к источнику питания, @wilkas
Из-за разного прямого напряжения трех светодиодов и разного входного напряжения питания., @Majenko
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Разница между print() и println()
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
Используйте HSV, как сказал Маженко. Но вы также можете добавить гамма-коррекцию к этим значениям RGB. Наши глаза не воспринимают разницу в яркости линейно., @Gerben
Любые советы, как это сделать? Я не собирался регулировать яркость или насыщенность, а просто использовать максимальные значения., @wilkas
У Adafruit есть отличное объяснение и руководство по этому вопросу на https://learn.adafruit.com/led-tricks-gamma-correction/the-issue., @Gerben
Спасибо, быстрое исправление гамма-коррекции было так легко реализовать, и оно улучшило внешний вид, особенно после реализации пульсирующего затухания., @wilkas