我正在为Arduino编写一个小程序,它能够从HEX颜色代码的char数组中读取RGB值。让我举个例子,因为很难用不同的方式解释:
从arduino串行监视器我发送:
/ 1ffffff000000
第一个字符告诉Arduino这将是十六进制颜色代码的序列。第二个字符告诉它将有多少颜色代码(它从0开始。因此1表示两种颜色)。然后它循环通过每个HEX代码的六个字符并将其添加到hex [] char数组中的受尊重位置。 Hex []数组是二维的,因为在第一个"维度"它具有颜色的序列号,在第二个中它存储该颜色的RGB值。
以下内容如下:
255 255 255 0 0 0 //第一部分没问题,但第二部分搞砸了。
255 255 0 0 0 0 0 //将下一个颜色的RED值设置为上一个颜色的BLUE值
这是代码。我无法找到更简单的方法来实现这个想法。如果您有关于如何使其更好或更有效的建议,请告诉我。
提前致谢!
char barva[10];
char hex[10][2];
long bluetoothVal;
bluetoothVal = Serial.read();
if (bluetoothVal == '/')
{
delay(2);
Serial.flush();
input=Serial.read();
char load = input;
int steps = load - '0';
for (int counter = 0; counter <= steps; counter++)
{
for (int i = 0; i <= 5; i++)
{
delay(2);
Serial.flush();
delay(2);
Serial.flush();
bluetoothVal=Serial.read();
char load = bluetoothVal;
barva[i] = load;
}
long int rgb = strtol(barva,0,16); //=>rgb=0x001234FE;
hex[counter][0] = (byte)(rgb>>16);
hex[counter][1] = (byte)(rgb>>8);
hex[counter][2] = (byte)(rgb);
Serial.println(hex[counter][0]);
Serial.println(hex[counter][1]);
Serial.println(hex[counter][2]);
}
for (int i = 0; i <= 1; i++)
{
Serial.println("");
Serial.println(hex[i][0]);
Serial.println(hex[i][1]);
Serial.println(hex[i-1][2]);
}
}
答案 0 :(得分:4)
hex
应声明为
char hex[10][3];
您在一个地方以hex
身份访问hex[counter][2] = (byte)(rgb);
。为此,您需要一个10 * 3阵列。