600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > HSV颜色空间转RGB(C语言代码) ESP32使用RMT驱动WS2812B 七彩流光灯光效果

HSV颜色空间转RGB(C语言代码) ESP32使用RMT驱动WS2812B 七彩流光灯光效果

时间:2019-10-29 15:29:28

相关推荐

HSV颜色空间转RGB(C语言代码) ESP32使用RMT驱动WS2812B 七彩流光灯光效果

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,简洁易用。

不足的地方是输入输出都是整形,如需浮点,请自行将里面的参数都改为floatdouble

/*** @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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。