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

时间:2013-10-08 12:05:36

标签: c arduino arduino-ide

使用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版本

3 个答案:

答案 0 :(得分:2)

它们不是Unknow字符,这就是你打印的字符:

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

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

即可

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

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

答案 1 :(得分:0)

错误的是您使用的byte类型的值大于255.请尝试更改为int16_t

答案 2 :(得分:0)

开头的字符是您发送的buff编号的ASCII表示。 arduino串行监视器监视所有活动,并打印出.write命令。你以后做的.writeln会在原始的.write之后另外打印。

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

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