この記事は、暇なときに機械的なもので遊びたいだけの人に役立ちます。
エントリー
子供の頃から、私はさまざまなデザイナーが大好きなので、この夏、マインドストーム8547を購入することにしました。 私の大きな失望に、それはキューブを一緒に座って置くことは絶対に面白くないことであることが判明しました-あなたは不適切な時間を費やしていると感じます。 しかし、問題のソフトウェア側が招いた。 ユーザーガイドを読むと、少なくとも平凡な動き(前方/後方/右側/左側)でBluetoothを使用してロボットを制御する機能があるはずであることが示されました。 Google Playには既に十分な管理プログラムがありますが、課題はこれを自分で行うことです。
与えられた:
1. Androidフォン(LG P970)
2. Mindstorms NXT 2.0のマシン

実装
グーグルで数晩過ごした後、レゴのウェブサイトに必要なすべての情報が含まれていることが判明しました(そのような贈り物は望みませんでした)。 ブロック、センサー、およびデータ転送プロトコルの内部コンテンツ全体の説明があります。 「Bluetooth Developer Kit」にのみ興味があります。 内部4ファイル:
•LEGO MINDSTORMS NXT Bluetooth Developer Kit.pdf
•付録1-レゴマインドストームNXT通信protocol.pdf
•付録2-LEGO MINDSTORMS NXT Direct commands.pdf
•付録3-LEGO MINDSTORMS NXT ARM7 Bluetoothインターフェイス仕様.pdf
全体として、タスク全体は次のことを確認することです。
1.電話とNXTコントロールユニットのペアリング
2. NXTユニットに接続します
3.正しいコマンドを送信します。
4.答えを得る
コマンド形式:
バイト0:コマンドの長さの最も若い部分
バイト1:チームの長さの最も古い部分
バイト2:コマンドタイプ
バイト3:チーム
バイト...:引数はコマンドに依存します。
例:
バッテリーを受け取る:
GETBATTERYLEVEL
バイト0:0x00または0x80
バイト1:0x0B
返品パッケージ:
バイト0:0x02
バイト1:0x0B
バイト2:ステータスバイト
バイト3-4:電圧(ミリボルト)(UWORD)
コード:
byte[]command = new byte[] {
0x02, 0x00, 0x00, 0x0b
};
mmOutStream.write(command);
mmOutStream.flush();
前進する:
byte[]command = new byte[] {
0x0C,
0x00,
0x00,
0x04,
(byte)0xFF,
100,
0x01,
0x00,
0x00,
0x20,
(byte)0x80,
0x00,
0x00,
0x00
};
ダウンロードしたプログラムの起動:
byte[]command = new byte[] {
0x0E,
0x00,
0x00,
0x00,
'M',
'i',
'n',
'd',
'e',
'r',
'1',
'.',
'r',
'x',
'e',
0x00
};
交換プロトコルを知っていれば、実装はもはや問題を提示しません。 コントロールユニットに接続するタスクは簡単で、Androidサイトで説明されていますが、唯一の興味深い点はソケットの作成です。 次のコードを使用して作成することが判明しました。
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
BluetoothSocket sendSocket = (BluetoothSocket) m.invoke(device, 1);
実例: