0

我正在使用 Wire 类让两个 Arduino Unos 使用 I2C 进行通信。似乎 Wire 类以 0 值结束传输。因此,如果我发送字节 0x01、0x02、0x00 和 0x04,主设备会收到:0x01、0x02、0xFF、0xFF。

为处理器通信设计的通信网络无法发送 0x00 似乎很奇怪。我见过的所有 I2C 示例都只使用 ASCII。仅限于 ASCII 的处理器间通信似乎没有任何意义。我是否缺少 I2C 的某些内容,或者这只是 Arduino Wire 类的实现限制?

掌握

void loop() {
  Wire.requestFrom(2, 4); 

  while(Wire.available()) { 
    byte b = (byte) Wire.read(); 
    Serial.println(b); 
  }

  delay(1000);
}

奴隶

void requestEvent() {
  char bytes[4] = {0x01,0x02,0x00,0x04};
  Wire.write(bytes);
}

结果是:1 2 255 255。

当 0x00 是 0x03 时,我得到了预期:1 2 3 4。

4

2 回答 2

6

您将 s 数组传递charWire.write()... 这使得Wire将参数视为以 null 结尾的字符串,因此NULL字节终止传输。如果要发送bytes,请write()为每个字节调用一次函数,并传递它的byte类型。

或者,您可以调用write(const uint8_t *, size_t);版本:您将一个指向 / 字节数组的指针传递给它,但您还必须给它一个数据数组的大小。

于 2013-03-31T05:54:46.497 回答
0

在调用 Wire.write() 之前,是否发生了 Wire.begin() 和 Wire.beginTransmission()(地址正确)?

于 2013-03-31T05:48:32.130 回答