我只是试图使用序列接收字符串并将该字符串发回。因此,当我通过串口向一个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中运行此代码。它工作得很好)
答案 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);
}
还可以尝试其他终端。