2016-04-30 315 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字符。 –