数组破坏了它的字符C ++

时间:2016-02-08 11:03:09

标签: c++ arrays arduino arduino-uno

我正在为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]);    
        }
    }

1 个答案:

答案 0 :(得分:4)

hex应声明为

char hex[10][3];

您在一个地方以hex身份访问hex[counter][2] = (byte)(rgb);。为此,您需要一个10 * 3阵列。