2013-10-08 91 views
1

使用Serial.write串行发送字节数组时发生错误。使用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 

任意而在启动未知charcters。我使用的Arduino版本1.0.5

+0

请问你究竟想在这里告诉我们什么:“* ...任何时候对于未知的字符在开始... *”? – alk

+0

在开始时获取未知字符的任何想法.... –

回答

2

他们不是不明的人物,那就是你有什么印:

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

只需选中一个ASCII tablebuf[0] = 125 = '{'

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

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

+0

是的,你是对的...但任何想法,为什么它采取ASCII字符? –

+0

看看编辑的答案 – Federico

0

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

0

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

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

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

相关问题