2

Arduinoの通信に問題があります。説明するのがかなり難しいので、タイトルに収めることができません。とにかくここにあります:

だから私は私の受信側のためにこのコードを持っています:

if(Serial1.available())
{
    while(Serial1.available())
    {
        uint8_t inByte = Serial1.read();

        inByte = inByte ^ k;

        Serial.write(inByte); 
    }

    Serial.println(" done");
}

1行で印刷し、完了したら印刷することになっています。Serial1.available()次をスキップするようです、何Serial1.available()が起こっているのかわかりません。とにかく、これが私の現在の悪い出力です:

h done
e done
l done
l done
o done

done

いつあるべきか:

hello done

これがもっとうまく表現できたら申し訳ありませんが、今入力できるのはそれだけです。私の脳はちょっと痛いです。Windowsc++コンソールアプリケーションでこの動作を経験したことはありません。

4

1 に答える 1

5

loop() でそのルーチンを呼び出している場合は、そうです。データを十分に速く送信していない可能性があるため、シリアル バッファーから読み取り、すぐに戻ります。

この種のことを処理するより良い方法は、メッセージの終わりを示す制御文字を使用することです。または、受信する特定のデータ形式がある場合は、データ形式になるまで入ってきた文字の数を保持します。限界に達しています。

役に立つかもしれない議論がここにあります: Serial Duplex using Arduinoまた、Arduino IDE に同梱されているスケッチの例もあります: メニュー: 例: 通信:

また、Arduino のシリアルリストの下にあるすべてのエントリをお読みください。そこに良いものがあります。

したがって、シリアル入力を操作するために開発するルーチンは、プロジェクトと受信するデータの種類によって異なります。上記の例で、制御文字を使用する場合、次のようになります。

 while(Serial1.available()){
   char c = Serial1.read();

   if (c == '*'){
       Serial.println(" done");
   } else {
       Serial.write(c); 
   } 
 }
于 2012-10-06T00:13:29.487 に答える