[英]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.