通过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
s数组传递给Wire.write()
…这使得Wire
将参数视为以空结尾的字符串,因此NULL
字节终止传输。如果你想发送byte
,每个字节调用write()
函数一次,传递byte
类型。
或者,你可以调用write(const uint8_t *, size_t);
版本:你传递给它一个指向字节数组的指针,但你也必须给它一个数据数组的大小。
在调用Wire.write()之前是否有Wire.begin()和Wire.beginTransmission()(具有正确的地址)?
相关文章:
- 从命令行c++发送文本文件名
- 发送一个带有libcurl C++问题的帖子请求:s
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C++中将函数发送到另一个进程
- boost xml parsingl将xml的路径作为变量发送
- 如何将数组从Objective-C发送到C++函数
- 如何使用ESP8266向谷歌主页发送命令
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 为什么默认复制函数在按值发送参数时不调用?
- 程序不断发送垃圾邮件号码?
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 如何使用 Google Test 向测试添加元数据 / 如何将数据从 Google Test 发送到 TestEven
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- Qt:如何使不兼容的发送方/接收方参数兼容?
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- Win32 发送输入鼠标移动滞后并冻结
- 使用 Winsock2.h C++向不和谐 API 发送 HTTP 请求时出现问题
- 如何使用QtQSerialPort发送十六进制0x00
- 通过I2C发送0x00