2016-04-30 308 views
1

我只是试图接收使用串行的字符串并将此字符串发回。所以当我通过串口发送一个字符串到一个arduino时,arduino应该自动发回这个字符串。serial.println(String)打印“#”而不是字符串

我创造了这个代码:

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电路。在那里,它的工作只是罚款)

+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个虚拟字节。而我没有解决它。但是,如果weired字节总是一样的,您可以用String.remove()一个简单的一招:

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

也可以尝试其他终端。

+0

Sory,不清楚:你收到你发送的或不是?或者在预期之前有额外的字符串。 –

+0

对不起,我没有完成答案。我的意思是如果我发送“你好”,它将返回“* 12 | 99 | 99 | hello#”。因此,测试变量的值在那里,但也有这些weired字符。 – Dides1948

+0

尝试更新的代码,让我知道如果你会收到weired字符。 –