簡體   English   中英

使用I2C發送0x00

[英]Sending 0x00 using I2C

我正在使用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。

您正在將一個char數組傳遞給Wire.write() ...這使Wire將參數視為以空字符結尾的字符串,因此NULL字節終止了傳輸。 如果要發送byte s,請為每個字節調用一次write()函數,並將byte類型傳遞給它。

另外,您可以調用write(const uint8_t *, size_t); 版本:向它傳遞一個指向/字節數組的指針,但還必須給它一個數據數組的大小。

在調用Wire.write()之前,是否發生了Wire.begin()和Wire.beginTransmission()(具有正確的地址)的發生?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM