Arduino草图中的RGB到Hex

时间:2011-11-30 01:15:08

标签: hex rgb arduino

我有一个24位到12位十六进制的函数,并在LCD上打印颜色值。

如果用户输入RGB值,我如何将RGB转换为单个24位十六进制字符串?

我在网上找到了很多Java和C ++算法,但我似乎无法使它们与Arduino兼容。

3 个答案:

答案 0 :(得分:3)

最后我看,Arduino没有很好的方式来打印其他格式,比如printf()。因此,您必须自己转换为十六进制,或者通过将实际整数转换为十六进制字符表示来查找现有函数。这是一种方式:

我认为“24位”是RGB值,并且按照惯例,它是3个8位数0-255。在这种情况下,每个十进制数字都有两位十六进制数字。让我们用R = 243来说明。

第一个十六进制“数字”将是h1 = int(R/16),即15。 另一个是h2 = R - h1*16,即3。

但那些“数字”仍然是十进制数字。例如,在数组中有一个查找表,其中数组的索引是十进制数,值是十六进制字符。

例如,您将拥有lookup[15] = 'F'lookup[3] = '3'

只需打印出所有这些没有空白的数字就可以了。

答案 1 :(得分:3)

根据http://arduino.cc/en/Serial/Print,您应该可以使用:

Serial.print(78, HEX) gives "4E"

http://arduino.cc/en/Reference/HomePage还声明:

Arduino语言基于C / C ++。它链接AVR Libc并允许使用它的任何功能;有关详细信息,请参阅其用户手

因此,所有标准的printf功能都可用。

http://www.nongnu.org/avr-libc/user-manual

答案 2 :(得分:1)

int r = 128;
int g = 0x99;
int b = 32;
long rgb = 0;
rgb = ((long)r << 16) | ((long)g << 8 ) | (long)b;
Serial.println("R:" + String(r) + " G:" + String(g) + " B:" + String(b));
Serial.println("Hex: 0x" + String(rgb, HEX));