我有一个24位到12位十六进制的函数,并在LCD上打印颜色值。
如果用户输入RGB值,我如何将RGB转换为单个24位十六进制字符串?
我在网上找到了很多Java和C ++算法,但我似乎无法使它们与Arduino兼容。
答案 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功能都可用。
答案 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));