2016-03-26 13 views
0

i2cで取り込まれたデータを配列に保存しましたが、単一の値にアクセスしたいと思います。私が保存し、それらを保存する関数から配列の値を印刷するとき値が正常です、その関数の外からそれらにアクセスしようとすると、配列内の値 "0"を意味する "倍"値を取得する毎回私は救われました。i2cのバイト配列の配列

int byteArray[100]; 
boolean hoRicevutoDati = false; 


void setup() { 
Serial.begin(9600); // start serial for output 
Wire.begin(SLAVE_ADDRESS); 
Wire.onReceive(receiveDataList); 
} 

void loop() { 
delay(1000); 
hoRicevutoDati = dalleNoteAlMotorino(hoRicevutoDati); 
} 

void receiveDataList(int numByte){ 
int i = 0; 
while(Wire.available() > 0){ 
    for(i=0; i < 100; i++){ 
    byteArray[i] = Wire.read(); 
    if (byteArray[i] == 255){ 
     break; 
     } 
    else{ 
     Serial.println(byteArray[i]); 
     i++; 
    } 
    }; 
} 

boolean dalleNoteAlMotorino (boolean hoRicevutoDati) { 
while (hoRicevutoDati == true) { 
    Serial.print("byte[0] "); 
    Serial.println(byteArray[0]); 
    Serial.print("byte[1] "); 
    Serial.println(byteArray[1]); 
    Serial.print("byte[2] "); 
    Serial.println(byteArray[2]); 
    Serial.print("byte[3] "); 
    Serial.println(byteArray[3]); 
    Serial.print("byte[4] "); 
    Serial.println(byteArray[4]); 
    return hoRicevutoDati = false; 
} 
} 

I2C経由で私の代わりに、私は0を取得... dalleNoteAlMotorinoの実行時に、私は0、2、5、4を見て期待してい、{...、0,2,5,4}を送信しています0 0 2 0 5 0 4 ...すべての数字は0になります。周りを見回すと、バイト配列をポインタの配列に変えたかもしれないと思うが、私は配列をどこでもパラメータとして渡すわけではないので、どのように行ったのか分からない。私はまた、正確に値の前に0が何か、または値にアクセスする方法を理解していません。基本的に私は何が起こっているのか分かりません。

+0

ArduinoはCではありません!しかし、あなたはC言語を知らないと言われました。 – Olaf

答えて

1

他の誰かが私の問題を抱えている場合に備えて、私はここに残しています。私は、ポインタの住所が上で確認すること

Serial.print("value "); 
Serial.println(byteArray[i]); 
Serial.print("pointer address"); 
Serial.println((int)&byteArray[i]); 

を使用し、私は私の機能が彼らのためにすべての2つのバイトを検索しながら、I2Cからの値は、すべての4バイトを記憶してしまったことがわかりました。私が理解しているところでは、C(とarduino)はintを暗記するために可変の数字を使うことができ、それは問題だと思います。