2017-06-02 5 views
0

私はarduinoからrxtxライブラリーを使用してjavaプログラムにシリアル経由でセンサーデータを送信しています。問題は、新しい値がBufferedReaderに非常に高速にプッシュされ、リアルタイムでこれらを処理できないということです。イベントベースの実装から100ミリ秒ごとにポーリングに移行し、その間のすべての値を破棄したいと考えました。バッファ付きリーダーでデータを廃棄する

スキップする必要があるバイト数を正確に把握せずにバッファードリーダーをクリアする可能性はありますか?バッファが準備されている間にRead Lineを呼び出すwhileループは非常に面倒であるように見えますが、十分高速であるかどうかはわかりません。

値を読み取ってバッファリングされたリーダーをクリアし、100ミリ秒待ってからもう一度古い値を読み取っても問題ありません。もう一つの可能​​性は、arduinoがデータを送信する速度を制限することですが、これは私がより高速に依存する可能性があるので、これが私の最も気に入っていないアプローチです。

答えて

0

バッファが準備されている間にreadlineを呼び出すwhileループは非常に面倒なようですが、十分高速であるかどうかはわかりません。

コンピュータのJavaが実行速度はどれくらい遅いですか? PCは一般的にArduinoのシリアルラインより数桁速いです。

arduinoがデータを送信する速度を制限することもできますが、将来的には高速化に頼っている可能性があります。

おそらく最良のオプションです。後でより高速にする必要がある場合は、Arduinoのコードを更新してください。

+0

コンピュータに問題はありません。 arduino IDEのシリアルモニタはうまく動作しますが、これらの値をJavaに送ることは問題の始まりです。私は今日後で家に帰ると、whileループソリューションを試してみましょう。私は、私が考えなかったより良い解決策がなければならないと考えました。 – John

+0

ありがとうございます。 whileループは問題を解決しました。リスナーがボトルネックを起こしたイベントに頼っているようです。 – John