i2c中的字节指针数组

Array of bytes pointers in i2c

本文关键字:指针 数组 字节 i2c      更新时间:2023-10-16

我已经将通过i2c到达的数据保存在一个数组中,我想访问单个值。当我保存并打印保存函数中的数组值时,这些值很好,当我试图从该函数外部访问它们时,我会得到一个"double"值,这意味着在数组中,在我保存的每个值之前都存储了一个值"0"。

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,2,5,4,…},当dalleNoteAlMotorino运行时,我希望看到0,2,5,4…相反,我得到了0 0 2 0 5 0 4…每个数字之前都有一个0。环顾四周,我想我可能已经把字节数组变成了一个指针数组,尽管我不确定我是如何做到的,因为我没有把数组作为参数传递到任何地方。我也不明白值之前的0到底是什么,也不明白我如何才能只访问值。基本上我不明白发生了什么。

我要离开这里,以防其他人遇到我的问题。我使用

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

检查指针地址,我发现i2c中的值每4个字节存储一次,而我的函数每2个字节搜索一次。根据我的理解,C(和arduino)让你用一个变量来记住int,我认为这就是问题所在。