2017-05-25 8 views
0

6つのRFIDリーダーのRFIDタグが変換してRGBで出力する6桁のHEXコードを作成するプロジェクトを作成しています。配列の値を変更してRGBに変換する方法

HEX値をRGB値に変換していて、シリアルで値を出力しています。これはうまくいきます。例えば、私は#FFFFFFを書くとき、シリアルがそれぞれのRGB値を出力します - 255、255、255

しかし、私は変更する必要のある、一度にHEXコードの文字のを交換できるようにしたいですそのRGB出力をシリアルに出力します。この例では、#FFFFFFの最後の文字を3 - #FFFFF3に置き換えようとしています。シリアルは最初の2つの値を正しく読み込みますが、最後の値は正しく変換されません。

値を置き換えて配列を変更するのではなく、新しい値( )を使用して新しい配列を作成する方が良い方法だと読んだことがあります。ここで私は今持っているものです:

#include <stdlib.h> 
#include <string.h> 

void setup() { 
Serial.begin(9600); 
} 

char hexColor[] = "#FFFFFF"; 
void HEXtoRGB(); 


void HEXtoRGB() { 
hexColor[6] = "3"; 

char red[5] = {0}; 
char green[5] = {0}; 
char blue[5] = {0}; 

red[0] = green[0] = blue[0] = '0'; 
red[1] = green[1] = blue[1] = 'X'; 

red[2] = hexColor[1]; 
red[3] = hexColor[2]; 

green[2] = hexColor[3]; 
green[3] = hexColor[4]; 

blue[2] = hexColor[5]; 
blue[3] = hexColor[6]; 

long r = strtol(red, NULL, 16); 
long g = strtol(green, NULL, 16); 
long b = strtol(blue, NULL, 16); 

Serial.println(r); 
Serial.println(g); 
Serial.println(b); 
Serial.println(hexColor); 
} 

を入力の任意の並べ替えが非常に高く評価されるだろう、それはjavascriptの以外の何かに書いて初めてです。

ありがとうございます。

+1

*が正しく*最後の値を変換しません - あなたが取得しているどのような値はありますか?また、16進文字列全体を1つの整数に変換し、ビットシフトを使用して必要なものを取り出す方が簡単かもしれません。 – Kevin

+1

無関係なメモでは、あなたがArduinoのためにプログラミングしているように見えます。つまり、あなたは実際にC++のサブセットでプログラミングしています。 –

+0

hexColor [5] = '3'を使用 – anil

答えて

2

主なエラーが'3'"3"紛らわしいです。

"3"は、Cでヌル文字で終わる文字配列で、'3'は文字である3です。したがって、 hexColor[6] = "3";は、 "文字列"3"のメモリアドレスをhexColor[6]に書き込む"という意味です。あなたがやりたいこと

は次のとおりです。

hexColor[6] = '3'; 
0

これは動作するはずです:

char hexColor[7] = "#FFFFFF"; 
int main(){ 
    for(int i=0; i<7; i++) 
     printf("%c ", hexColor[i]); 
    hexColor[6]='3'; 
    for(int i=0; i<7; i++) 
     printf("%c ", hexColor[i]); 
} 

Outout:あなたがやっている #FFFFFF#FFFFF3