Android和乐高Mindstorm NXT之间的蓝牙连接

Android和乐高Mindstorm NXT之间的蓝牙连接,android,bluetooth,lego,mindstorms,nxt,Android,Bluetooth,Lego,Mindstorms,Nxt,有人知道如何在Android和乐高Mindstorm NXT之间建立蓝牙连接吗? 两个NXT之间的连接工作正常。但另一种连接类型不太容易。 我正在使用LeJOS固件0.85和Android SDK工具(2.2 Froyo)。因此我已经解决了它,并将展示它的所有工作原理,因为我看到很多人都有这方面的问题 该类包括4个功能: 如果在->enableBT()之前未启用蓝牙,则启用蓝牙功能 连接到2个NXT->connectToNXTs() 将消息写入其中一个nxt->writeMessage(字节消

有人知道如何在Android和乐高Mindstorm NXT之间建立蓝牙连接吗? 两个NXT之间的连接工作正常。但另一种连接类型不太容易。
我正在使用LeJOS固件0.85和Android SDK工具(2.2 Froyo)。

因此我已经解决了它,并将展示它的所有工作原理,因为我看到很多人都有这方面的问题

该类包括4个功能:

  • 如果在->enableBT()之前未启用蓝牙,则启用蓝牙功能
  • 连接到2个NXT->connectToNXTs()
  • 将消息写入其中一个nxt->writeMessage(字节消息,字符串nxt)
  • 从nxt之一读取消息->读取消息(字符串nxt)
以下是android设备(BT_comm.java)的代码:

要从Android智能手机获取消息,您必须在NXT端进行读取呼叫。 以下是NXT端的代码,它将接受智能手机的连接并从中读取消息:

Boolean isrunning = true;

// Main loop   
while (true)
{
  LCD.drawString(waiting,0,0);
  LCD.refresh();

  // Listen for incoming connection

  NXTConnection btc = Bluetooth.waitForConnection();

  btc.setIOMode(NXTConnection.RAW);

  LCD.clear();
  LCD.drawString(connected,0,0);
  LCD.refresh();  


  // The InputStream for read data 
  DataInputStream dis = btc.openDataInputStream();


  // Loop for read data  
  while (isrunning) {
    Byte n = dis.readByte();
    LCD.clear();
    LCD.drawInt(n, 4, 4);
  }

  dis.close();

  // Wait for data to drain
  Thread.sleep(100); 

  LCD.clear();
  LCD.drawString(closing,0,0);
  LCD.refresh();

  btc.close();

  LCD.clear();
}

希望这能帮助其他人

我发现有一个文档非常有用


github上的MINDdroid软件包是一个很好的起点。

您是否成功地首先将Android和LEGO Mindstorm NXT配对?请参阅下面我的答案,了解它的工作原理。在第一次运行或第一次连接到NXT时,智能手机将自动与NXT配对,并要求您从NXT中获取密钥以与之配对。我在HTC Desire上遇到了createRfcommSocketToServiceRecord问题,如果您计划编辑代码,您可能希望了解这些问题。请看(有人留下评论说,您应该使用OutputStream vs OutputStreamWriter作为OutputStream编码到unicode,并且对于大于127的VAL将中断…不知道这意味着什么,但删除该答案这确实帮助了我。如果我能多次投票支持您,我会的!
Boolean isrunning = true;

// Main loop   
while (true)
{
  LCD.drawString(waiting,0,0);
  LCD.refresh();

  // Listen for incoming connection

  NXTConnection btc = Bluetooth.waitForConnection();

  btc.setIOMode(NXTConnection.RAW);

  LCD.clear();
  LCD.drawString(connected,0,0);
  LCD.refresh();  


  // The InputStream for read data 
  DataInputStream dis = btc.openDataInputStream();


  // Loop for read data  
  while (isrunning) {
    Byte n = dis.readByte();
    LCD.clear();
    LCD.drawInt(n, 4, 4);
  }

  dis.close();

  // Wait for data to drain
  Thread.sleep(100); 

  LCD.clear();
  LCD.drawString(closing,0,0);
  LCD.refresh();

  btc.close();

  LCD.clear();
}