您好,感谢您抽出宝贵时间来研究这个问题。
我正在通过串行读取字符数组来试验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'
非常感谢你的帮助,
罗宾
答案 0 :(得分:1)
当您声明serialarray
时,您只是设置一个指向内存位置的指针,该内存位置可能包含以前存储在那里的任何类型的数据。
然后你正在从串口读取数据直到'\ 0'(不确定它是否未包含或实际上从未找到,因为你没有在显示器中输入它)。
在任何情况下,您创建的字符串都不会终止。
你可以这样做来终止你的字符串:
bytesread = Serial.readBytesUntil('\0', serialarray, buflen);
serialarray[bytesread] = '\0';
所有额外的角色都会消失......