serial.println(String) 打印“#”而不是字符串
serial.println(String) prints "#" instead of the string
我只是想使用序列号接收一个字符串并将该字符串发回。所以当我通过串行向 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 电路中 运行 这段代码。它工作得很好)
您需要更改密码。将 println
移动到 if
语句中。
尝试增加超时间隔,2ms 不够,好的值(在 9600)在 10ms 以上。理论上超时应至少为 3.5 个字符长,对于当前速度,这等于 ~0.4 毫秒。但实际上使用了更高的值。
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
}
}
更新:return 个字符返回的另一个简单解决方案如下:
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);
}
也试试另一个终端。
我只是想使用序列号接收一个字符串并将该字符串发回。所以当我通过串行向 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 电路中 运行 这段代码。它工作得很好)
您需要更改密码。将 println
移动到 if
语句中。
尝试增加超时间隔,2ms 不够,好的值(在 9600)在 10ms 以上。理论上超时应至少为 3.5 个字符长,对于当前速度,这等于 ~0.4 毫秒。但实际上使用了更高的值。
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
}
}
更新:return 个字符返回的另一个简单解决方案如下:
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);
}
也试试另一个终端。