Back to tech

2台のLegoNXTをシンクロ走行させる(プログラム編)

2 min read
Table of Contents
fedora.cis.cau.edu
fedora.cis.cau.edu

詳細→ 2台のLegoNXTをシンクロ走行させる

一段落しましたのでソースコードを公開します。

題名でもありますようにLejosNXTをBluetoothで操作を行っています

公式でもBluetoothの接続方法が記載されている(詳細)が、残念ながらできませんでした。。。(多分バージョンの違いや使用したNXTが古いからかも・・・)

ネットでソースコードを漁っていたらできたので載せます。以下ソース↓

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;

import lejos.nxt.LCD;
import lejos.nxt.comm.Bluetooth;
import lejos.nxt.comm.NXTConnection;

public class ConnectBT {
 public static void main(String[] args) throws Exception{
  
   LCD.clear();
   LCD.drawString("Waiting...", 0, 2);
    
    //RAW形式での送受信
    NXTConnection con = Bluetooth.getConnector().waitForConnection(0, NXTConnection.RAW);
    LCD.drawString("Connected...", 0, 2);
    
    DataInputStream dis = con.openDataInputStream();
    DataOutputStream dos = con.openDataOutputStream();
    
    while(true){
     int n;
                 try{
                     n = dis.readInt();
                 } catch (EOFException e)
                 {
                     break;
                 }
                 LCD.drawString("Read: ", 0, 4);
                 LCD.drawInt(n, 7, 6, 4);

                 dos.writeInt(n);
                 dos.flush();
    }
    
    LCD.drawString("Closing...  ", 0, 2);
    dis.close();
    dos.close();
    con.close();
 }
}

肝となるのが16行目のRaw Socketで送受信をさせるようにすることです。

NXTConnection con = Bluetooth.getConnector().waitForConnection(0, NXTConnection.RAW);

を記述して、あとは送信するなり受信するなりしてください。

参考

  1. http://fedora.cis.cau.edu/~pmolnar/CIS687F12/Programming-LEGO-Robots/samples/src/org/lejos/sample/nxtreceive/NXTReceive.java
  2. http://blog.livedoor.jp/prisonedkid/archives/1302852.html