HSV(Hue
,Saturation
,Value
) 模型中,颜色的参数分别是:色调(H)
,饱和度(S)
,明度(V)
。它更类似于人类感觉颜色的方式,颜色?深浅?明暗?通过这种方式可以很直观的改变渲染效果。
RGB
在生活最为常用,显示屏
、RGB-LED
等发光显示器件,最后都会用RGB的方式去表现。但RGB在使用过程中却有许多麻烦,例如明明两种颜色相近,但RGB的参数有时却天差地别。并且更改RGB参数时很容易影响亮度。
1. 计算机应用中的HSV色轮
HSV表达颜色有3个参数:
色调(Hue)
:单位°,范围0~360。(负责调整颜色,0°-红色,120°-绿色,240°-蓝色,以此类推)饱和度(Saturation)
:单位%,范围0~100。(饱和度高,颜色深而艳;饱和度低,颜色浅而发白)明度(Value)
:单位%,范围0~100。(控制明暗,明度越高直观感受亮度越亮,越低亮度越低甚至发黑)
注意:HSV(色调(H)
,饱和度(S)
,明度(V)
)有别于HSL(色调(H)
,饱和度(S)
,亮度(L)
)
2. Hue色调
通常在编写代码中,饱和度
、明度
大多不是重点,一般直接拉到最高,或者保持一个固定的值。时常需要变动的是Hue色调
,也就是直观的颜色。用0~360°
来表示各种颜色。
3. HSV转RGB(C语言代码)
ESP32完整工程:easyio库 中的Demo -20_RMT_1WIRE_WS2812B
下面这段代码摘自乐鑫ESP32的SDK-Demoled_strip
,简洁易用。
不足的地方是输入输出都是整形
,如需浮点,请自行将里面的参数都改为float
或double
。
/*** @brief 将HSV颜色空间转换为RGB颜色空间*- 因为HSV使用起来更加直观、方便,所以代码逻辑部分使用HSV。但WS2812B RGB-LED灯珠的驱动使用的是RGB,所以需要转换。* * @param h HSV颜色空间的H:色调。单位°,范围0~360。(Hue 调整颜色,0°-红色,120°-绿色,240°-蓝色,以此类推)* @param s HSV颜色空间的S:饱和度。单位%,范围0~100。(Saturation 饱和度高,颜色深而艳;饱和度低,颜色浅而发白)* @param v HSV颜色空间的V:明度。单位%,范围0~100。(Value 控制明暗,明度越高亮度越亮,越低亮度越低)* @param r RGB-R值的指针* @param g RGB-G值的指针* @param b RGB-B值的指针** Wiki: /wiki/HSL_and_HSV**/void led_strip_hsv2rgb(uint32_t h, uint32_t s, uint32_t v, uint32_t *r, uint32_t *g, uint32_t *b){h %= 360; // h -> [0,360]uint32_t rgb_max = v * 2.55f;uint32_t rgb_min = rgb_max * (100 - s) / 100.0f;uint32_t i = h / 60;uint32_t diff = h % 60;// RGB adjustment amount by hueuint32_t rgb_adj = (rgb_max - rgb_min) * diff / 60;switch (i) {case 0:*r = rgb_max;*g = rgb_min + rgb_adj;*b = rgb_min;break;case 1:*r = rgb_max - rgb_adj;*g = rgb_max;*b = rgb_min;break;case 2:*r = rgb_min;*g = rgb_max;*b = rgb_min + rgb_adj;break;case 3:*r = rgb_min;*g = rgb_max - rgb_adj;*b = rgb_max;break;case 4:*r = rgb_min + rgb_adj;*g = rgb_min;*b = rgb_max;break;default:*r = rgb_max;*g = rgb_min;*b = rgb_max - rgb_adj;break;}}
4. 七彩流光灯光效果
ESP32完整工程代码:easyio库 中的Demo -20_RMT_1WIRE_WS2812B
。
easyio的使用介绍:ESP32开源驱动库Easyio的使用
ESP32开发板开源计划
现已开源一款ESP32物联网开发板,支持WIFI、蓝牙、以太网、RS485、CAN通信。板载6轴IMU、温湿度传感器、38K红外遥控收/发、独立RTC、TF卡座。USB和18650双电源供电,有2.0寸单点电容屏可用,配套各外设驱动和LVGL源码。Github、立创EDA、CSDN全云端同步更新。
详情可见:
ESP32-IOT-KIT 开发板介绍:
ESP32开发板开源啦 ESP32-IOT-KIT全开源物联网开发板
PCB硬件:
立创EDA:ESP32开发板 IOT-KIT原理图、PCB、BOM
打样免费的时代,速去JLC白嫖PCB。
开源学习交流Q群:827686418