【问题标题】:Can Arduino transmit null characters via Serial?Arduino可以通过串行传输空字符吗?
【发布时间】:2020-01-05 06:19:02
【问题描述】:

我将通过内置的硬件串行库在两个 Arduino 之间建立二进制驱动的串行通信。由于我的数据包是以二进制格式构造的,因此对于具有 0 值的整数实例,数据包中的几个字符很可能是空字符。我不确定 Arduinos 将如何处理空字符,或者根本不知道。在我继续我的项目之前,我当然想知道。

【问题讨论】:

标签: serial-port arduino


【解决方案1】:

二进制数据可以使用write()方法以如下形式传输:

Serial.write(buf, len)

在哪里...

buf:作为一系列字节发送的数组。
len:要从数组发送的字节数。

以这种方式传输所有指定的字符,包括空字符。否则,如果只是将缓冲区参数传递给该方法,它会将参数视为字符串并在遇到第一个空字符时停止传输。

【讨论】:

    【解决方案2】:

    是的。 Arduino documentation for write() 谈论“二进制数据”和字节。

    【讨论】:

    • 谢谢,这也省去了我制作函数对整数进行按位移位的麻烦。
    【解决方案3】:

    回到未来!

    是的,标准 UART 串​​行可以很好地处理二进制文件。确保您在串行线的每一端的 UART(通用异步接收/发送)设备上配置了一个停止位,并且您应该已准备就绪。

    根据我的经验,这种事情需要一定的时间才能做到正确。如果您将两个 UART 都设置为 8 位、一位停止位、无奇偶校验和相同的位/秒速率,那么您应该会很好。

    如果您真的感到困惑,可以尝试将串行线路的一端连接到 PC 上的终端仿真器。 Van Dyke Software 的 SecureCRT 有 30 天的免费试用期,可以处理普通串行。

    【讨论】:

      【解决方案4】:

      我发现通过软件串行发送以下 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多