我将通过内置的硬件串行库在两个 Arduino 之间建立二进制驱动的串行通信。由于我的数据包是以二进制格式构造的,因此对于具有 0 值的整数实例,数据包中的几个字符很可能是空字符。我不确定 Arduinos 将如何处理空字符,或者根本不知道。在我继续我的项目之前,我当然想知道。
4 回答
二进制数据可以使用write()
以下形式的方法传输:
Serial.write(buf, len)
在哪里...
buf:作为一系列字节发送的数组。
len:要从数组发送的字节数。
以这种方式传输所有指定的字符,包括空字符。否则,如果只是将缓冲区参数传递给方法,它会将参数视为字符串并在遇到第一个空字符时停止传输。
是的。用于讨论“二进制数据”和字节的Arduino 文档。write()
回到未来!
是的,标准 UART 串行可以很好地处理二进制文件。确保您在串行线的每一端的 UART(通用异步接收/发送)设备上配置了一个停止位,并且您应该已准备就绪。
根据我的经验,这种事情需要一定的时间才能做到正确。如果您将两个 UART 设置为 8 位、一位停止位、无奇偶校验和相同的位/秒速率,那么您应该很好。
如果您真的感到困惑,您可以尝试将串行线的一端连接到 PC 上的终端仿真器。Van Dyke Software 的 SecureCRT 有 30 天的免费试用期,可以处理普通串行。
我发现通过软件串行发送以下 uart 数据包的相同问题:a[10]={0x12,0x32,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x14} mySerial.write(a) 将仅发送 0x12,0x32 ,0x30 并且不会发送空字符。为了解决这个问题,我必须使用 mySerial.write((byte)0) 发送空字符。因此,Arduino 串行库仅在单独发送空字符时才发送空字符:P