我使用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);
}
Run Code Online (Sandbox Code Playgroud)
奴隶
void requestEvent() {
char bytes[4] = {0x01,0x02,0x00,0x04};
Wire.write(bytes);
}
Run Code Online (Sandbox Code Playgroud)
结果是:1 2 255 255.
当0x00是0x03时,我得到了预期:1 2 3 4.
您正在将一个char
s 数组传递给Wire.write()
...这使得Wire
将参数视为以null结尾的字符串,因此该NULL
字节终止传输.如果要发送byte
s,请write()
为每个字节调用一次函数,并传递它byte
类型.
或者,您可以调用该write(const uint8_t *, size_t);
版本:向它传递指向/数组字节的指针,但您还必须为其指定数据数组的大小.
归档时间: |
|
查看次数: |
1766 次 |
最近记录: |