1

使用 . 串行发送字节数组时出错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 版本

4

3 回答 3

2

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

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

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

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

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

于 2013-10-08T12:35:55.137 回答
0

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

于 2013-10-08T14:30:45.120 回答
0

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

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

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

于 2015-06-15T10:15:12.103 回答