收到的额外字符:Arduino Serial

时间:2015-07-19 17:45:58

标签: arrays string arduino serial-port character

您好,感谢您抽出宝贵时间来研究这个问题。

我正在通过串行读取字符数组来试验Arduino。这将最终用于与覆盆子pi进行通信并将接收到的字符串(例如:'100,200,300)拆分为:Var1 = 100,Var2 = 200,Var3 = 300等。

浏览了各种论坛后,我尝试将自己的序列编写为字符串函数,如下所示:

String message;
int buflen = 12;
int bytesread = 0;


void setup() 
{
Serial.begin(9600);
}


void loop() 
{
  if (Serial.available() > 0)
  {
  message = ReadStringFromSerial();
  Serial.print("Read message is: ");
  Serial.println(message);
  }
}

String ReadStringFromSerial()
{
   char serialarray[buflen];
   bytesread = Serial.readBytesUntil('\0', serialarray, buflen);
   Serial.print("Array: ");
   Serial.println(serialarray);
   Serial.print("Bytes read: ");
   Serial.println(bytesread); 
   String returnedmessage = String(serialarray);
   return returnedmessage;  
}

然而,当反复在串行监视器中输入'test'时,我得到以下结果:

Array: TestA
Bytes read: 4
Read message is: TestA
Array: TestXXX
Bytes read: 4
Read message is: TestXXX
Array: TestXXXXó
Bytes read: 4
Read message is: TestXXXXó

我想知道额外的角色来自哪里,因为我有点困惑。 此外,串行监视器是否添加了任何额外的字符,例如空字符'\ 0',或者只是发回'test'而不是'test \ 0'

非常感谢你的帮助,

罗宾

1 个答案:

答案 0 :(得分:1)

当您声明serialarray时,您只是设置一个指向内存位置的指针,该内存位置可能包含以前存储在那里的任何类型的数据。

然后你正在从串口读取数据直到'\ 0'(不确定它是否未包含或实际上从未找到,因为你没有在显示器中输入它)。

在任何情况下,您创建的字符串都不会终止。

你可以这样做来终止你的字符串:

bytesread = Serial.readBytesUntil('\0', serialarray, buflen);
serialarray[bytesread] = '\0';

所有额外的角色都会消失......