この質問は、レゴ マインドストーム ロボットの NXT ブロックと通信するアプリケーションの作成に関するものです。
私がしたいこと
NXC (厳密には C ではなく、NXT 用のプログラムを作成するための言語) は、条件が true と評価されるuntil(condition)
まで待機する関数を提供します。Bluetoothメッセージングプロトコルを使用してこれを実装し、AndroidアプリケーションからBluetooth経由でNXTと通信したいと考えています。
これまでにできること:
入力クエリ メッセージ ( ) を送信できます。このメッセージは、 の入力のgetInputValue(int in)
現在のステータスを求めるメッセージを NXT に送信します。次に、NXT はこの情報を含むメッセージを送り返します。この情報は、最後に要求された入力値を保持するグローバル変数に書き込まれます ( と呼びましょう)。myValue
問題は何ですか:
私はレゴ MINDroid アプリケーションの一部を使用しています。このクラスには、NXT との直接通信を処理する別の通信スレッドがあります。メッセージを受信すると、 を介してメイン スレッドに転送しますHandler
。この問題は、応答を待ってビジー状態にしようとすると発生します。
while(myValue != valueIWant) {
sleep(100);
getInputValue(in);
}
ハンドラが実際にメッセージを受信しないように、メイン スレッドがビジー状態になります。通信スレッドは NXT からメッセージを受信し、それらをメイン スレッドに転送しますが、ハンドラーは他の処理を行っているため呼び出されません。
これを回避する最善の方法は何ですか? メッセージの受信も停止するため、スレッドを待機させることはできません:(
任意の提案をいただければ幸いです! また、喜んでコードの詳細を説明します。
役に立つかもしれないリンク
http://bricxcc.sourceforge.net/nbc/nxcdoc/nxcapi/main.html
http://github.com/NXT/LEGO-MINDSTORMS-MINDdroid
http://mindstorms.lego.com/en-us/support/files/default.aspx (Bluetooth ドキュメント用)