【问题标题】:Extra Characters Received: Arduino Serial收到的额外字符:Arduino Serial
【发布时间】:2015-07-19 17:45:58
【问题描述】:

您好,感谢您抽出宝贵时间查看此内容。

我正在通过串行读取字符数组来试验 Arduino。这最终将用于与树莓派通信并将接收到的字符串(例如:'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;  
}

但是,当在串行监视器中重复输入“测试”时,我得到以下信息:

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”,或者它只是发回“测试”而不是“测试\0”

非常感谢您的帮助,

罗宾

【问题讨论】:

    标签: arrays string arduino serial-port character


    【解决方案1】:

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

    然后您正在从串行读取数据,直到“\0”(不确定它是否不包括在内,或者实际上从未找到,因为您没有在监视器中键入它)。

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

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

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

    所有多余的字符都会消失...

    【讨论】:

    • 太棒了,谢谢。我将执行此操作并报告!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多