【问题标题】:Error While Sending byte array serialy using Serial.write使用 Serial.write 串行发送字节数组时出错
【发布时间】:2013-10-08 12:05:36
【问题描述】:

使用Serial.write 串行发送字节数组时出错。

     byte buf[] = {125, 126, 127, 2000, 5000};

 int i = Serial.write(buf, sizeof(buf));

 for(int i = 0; i < (sizeof(buf) / sizeof(buf[0])); i++)
     {
          Serial.println(buf[i]);
     }

输出:

}~??125
126
127
208
136

开始时未知字符的任何时间。我使用的是 Arduino 1.0.5 版本

【问题讨论】:

  • 请问您到底想在这里告诉我们什么:“...Any while for Unknown charcters at start...”?
  • 在开始时获取未知字符的任何想法......

标签: c arduino arduino-ide


【解决方案1】:

它们不是未知字符,这就是您打印的内容:

int i = Serial.write(buf, sizeof(buf));

只需检查ASCII table buf[0] = 125 = '{'

使用write(),您正在编写没有任何格式的原始数据。您的第一个字节是值 125,二进制 01111101。这个字节对应于字符{,如果它被解释为char。您的串行通信将传入字节解释为 char,因此它会打印 '{`.

如果您想在串行通信中将125 打印为字符串,则必须发送buf[] = {49, 50, 53}。或者你必须将你的interget转换成一个字符串。

【讨论】:

    【解决方案2】:

    还有一个问题是您使用的 byte 类型的值高于 255。尝试更改为 int16_t

    【讨论】:

      【解决方案3】:

      开头的字符是您发送的 buff 数字的 ASCII 表示。 arduino 串行监视器监视所有活动,它还打印出您的 .write 命令。您稍后执行的 .writeln 会在原始 .write 之后额外打印。

      所以你看到的是 arduino 发送命令的 ASCII 表示。

      PS: 数字 2000 和 5000 不适合该字节,因此您发送的最后两个字节可能已损坏。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-06
        相关资源
        最近更新 更多