serial.println(String)print"#"而不是字符串

时间:2016-04-30 22:02:46

标签: c arduino println

我只是试图使用序列接收字符串并将该字符串发回。因此,当我通过串口向一个arduino发送字符串时,arduino应该自动发回该字符串。

我创建了这段代码:

String test;

void setup(){
  Serial.begin(9600);
  Serial.setTimeout(2);
  test = "null";
}

void loop(){
  if(Serial.available()){
    test = Serial.readString();
  }
  Serial.println(test);
}

我想这并不难理解。但是现在arduino将始终打印#"#"而不是变量测试。我连接的串口设备是蓝牙模块。 (HC-06)

我做错了什么?

谢谢!

(我也在arduino模拟器123D Circuits中运行此代码。它工作得很好)

1 个答案:

答案 0 :(得分:1)

您需要更改代码。将println移至if语句中。

尝试增加超时间隔,2ms是不够的,良好的值(在9600)高于10ms。理论上,超时应该至少为3.5个字符,对于当前速度,这等于〜0.4 ms。但实际上使用了更高的值。

String test;
void setup(){
  Serial.begin(9600);
  Serial.setTimeout(10);// or more
  test = "null";
}
void loop(){
  if(Serial.available()){
    test = Serial.readString();
    Serial.println(test);// moved into if
  }
}

更新:返回字符的另一个简单解决方案如下:

void loop(){
      if(Serial.available()) Serial.write(Serial.read());
}

更新2:与BLE模块HM10(克隆,非官方)有类似的问题。它在任何阵列之前发送大约15个虚拟字节。我没有解决它。但是如果我们的字节总是相同,你可以使用String.remove()制作一个简单的技巧:

if(Serial.available()){
        test = Serial.readString();
        test.remove(0,5);
        // test.remove - add code to remove last character
        Serial.println(test);
 }

还可以尝试其他终端。