私が書いたC#アプリケーションとBluetooth(bluesmirf goldデバイス)を介して通信するArduinoメガがあります。Arduino は常に 32 文字のシリアル信号を送信しています。最初は常に「S」で最後は「E」です。パテを使用して、この信号が 99% の確率で正しく送信されていることを確認できます。
ここで、次のコードを使用して、C# アプリケーションでこの信号を読み取りたいと考えています。
public string receiveCommandHC()
{
string messageHC = "";
if (serialHC.IsOpen)
{
while (serialHC.ReadChar() != 'S')
{
}
messageHC = serialHC.ReadTo("E");
serialHC.DiscardInBuffer();
}
return messageHC;
}
serialHC はシリアル クラスです。
これは完全に機能する場合もありますが、問題が発生する場合もあります。
私が抱えていると思われる問題は、arduinoから読み取っているデータにかなり大きなラグが発生することがあることです。ボタンの状態を送信していて、Arduinoのボタンを実際に押したり離したりしてから数秒しか変化しないため、これに気づきました。Bluetooth デバイスの標準のボー レートである 115200 を使用しましたが、これをもっと低いレートに変更すると、より良い結果が得られるのではないかと考えていました。それが何かメリットがあるとしたら?高い通信速度は必要ありません。1 秒間に 4 ~ 5 回状態を更新するだけでも、私のアプリケーションでは受け入れられます。
私のコードからラグが発生している可能性はありますか? 入ってくる「S」を待っているwhileループからのものかもしれないと思いますが、新しい信号が常に高速で入ってくるので、なぜそこにハングアップする必要があるのか わかりません。
DiscardInBuffer() を使用しているのは、古いデータを気にせず、それをスキップしたいだけだからです。現在の最新のデータを読み取り、その新しいデータに基づいて行動することがはるかに重要です。
ご協力ありがとうございました!
よろしくお願いします、
ベンダー
アップデート:
デバッグ中にもう少し情報が見つかりました。問題は次のように見えるだけです。
- Bluetooth経由で接続されている場合(USBケーブル経由ではラグはまったくありません)
- PC から別のデバイスへの 2 つ目の Bluetooth 接続が確立された場合 (別の COM ポートと別のボーレート)
PC で同じ Bluetooth ドングルから 2 つの異なるデバイスを実行した経験のある人はいますか? 問題なく両方に接続できますが、前述のラグの問題はまだあります。
助けてくれてありがとう