2016-04-30 18 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

あなたはあなたのコードを変更する必要があります。 printlnifに移動します。

タイムアウト間隔を長くすると、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ダミーバイトを送信していました。私はそれを解決しなかった。

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

はまた別の端末を試してみてください。常に同じバイトをweired場合しかし、あなたはString.remove()を使用して簡単なトリックを行うことができます。

+0

ソーリー、はっきりしていない:あなたはあなたが送るものを受け取るかどうか?または、予想より前に追加の文字列があります。 –

+0

申し訳ありませんが、私は答えを完了していません。私は "hello"を送ると "* 12 | 99 | 99 | hello#"を返します。したがって、テスト変数の値はそこにありますが、これらのweired文字もあります。 – Dides1948

+0

アップデートからコードを試してください。あなたがうまくいくキャラクターを受け取るかどうか教えてください。 –

関連する問題