如何将单个电位器值转换为R,G,B?

问题描述:

我正在使用输出值为0-255的电位器。我想要它做的是以包含256个步骤的方式改变RGB LED的颜色,其将以尽可能多的精度显示LED上的所有颜色you can get如何将单个电位器值转换为R,G,B?

问题: 如何将该单一值(0-255)转换为可应用于LED的rgb代码?

最明显的解决方案是创建一个包含所有256个可能值的字典,并手动将RGB代码分配给这些值。我不想这样做,我试图找到更多的数学解决方案。

+0

你想要什么样的精度?你在找什么样的彩色地图?您可能首先需要查看http://matplotlib.org/users/colormaps.html,以确定您希望三种颜色映射到您的256个值的集合如何影响要使用的数学公式。 – JAB

+0

每个LED的范围是什么 - 也是0到255? – stdunbar

+0

rgb值是从0到255的值的三元组。因此,您的单个0-255范围必须以某种方式映射 –

使用matplotlib colormaps之一。我会推荐jet色彩地图,因为大多数人都熟悉蓝色代表小值而红色代表大值的解释。

from matplotlib import cm 

pot_values = [0, 51, 102, 153, 204, 255] 
rgb = [] 
for x in pot_values: 
    val = cm.jet(float(x)/255)[:3] # The 4th element is gamma 
    rgb.append([round(x*255) for x in val]) 

print(rgb) 

# Output: 
# [[0.0, 0.0, 128.0], 
# [0.0, 76.0, 255.0], 
# [41.0, 255.0, 206.0], 
# [206.0, 255.0, 41.0], 
# [255.0, 104.0, 0.0], 
# [128.0, 0.0, 0.0]] 
+0

这正是我所期待的。我可以说matplotlib可能是我最不希望拥有此功能的库。 – Janekmuric

+1

@Janekmuric为此使用'matplotlib'的好处是,通过从'cm.jet'切换到'cm.cool','cm.nipy_spectral','cm.rainbow'来测试不同的颜色映射是相对容易的等等 –