gpt4 book ai didi

android - Android 和 Lego Mindstorm NXT 之间的蓝牙连接

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:00 33 4
gpt4 key购买 nike

有人知道如何在 Android 和 LEGO-Mindstorm-NXT 之间建立蓝牙连接吗?两个 NXT 之间的连接工作正常。但是其他的Connection-type就没那么容易了。我正在使用 LeJOS 固件 0.85 和 Android SDK 工具 (2.2 Froyo)。

最佳答案

所以我已经解决了它,并将展示它是如何工作的,因为我看到很多人对此有疑问。

该类包含 4 个函数:

  • 如果之前未启用蓝牙,则启用 -> enableBT()
  • 连接到 2 个 NXTs -> connectToNXTs()
  • 将消息写入其中一个 NXT -> writeMessage(byte msg, String nxt)
  • 从其中一个 NXT 读取消息 -> readMessage(String nxt)

这里是安卓设备的代码(BT_comm.java):

package de.joen.android.CubeScan;


import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.UUID;


import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;

import android.util.Log;

public class BT_Comm {

//Target NXTs for communication
final String nxt2 = "00:16:53:04:52:3A";
final String nxt1 = "00:16:53:07:AA:F6";

BluetoothAdapter localAdapter;
BluetoothSocket socket_nxt1, socket_nxt2;
boolean success = false;

// Enables Bluetooth if not enabled
public void enableBT(){
localAdapter = BluetoothAdapter.getDefaultAdapter();
// If Bluetooth not enable then do it
if (!localAdapter.isEnabled()) {
localAdapter.enable();
while(!(localAdapter.isEnabled()));
}
}

// Connect to both NXTs
public boolean connectToNXTs() {

// Get the BluetoothDevice of the NXT
BluetoothDevice nxt_2 = localAdapter.getRemoteDevice(nxt2);
BluetoothDevice nxt_1 = localAdapter.getRemoteDevice(nxt1);
// Try to connect to the nxt
try {
socket_nxt2 = nxt_2.createRfcommSocketToServiceRecord(UUID
.fromString("00001101-0000-1000-8000-00805F9B34FB"));

socket_nxt1 = nxt_1.createRfcommSocketToServiceRecord(UUID
.fromString("00001101-0000-1000-8000-00805F9B34FB"));

socket_nxt2.connect();
socket_nxt1.connect();

success = true;

} catch (IOException e) {
Log.d("Bluetooth","Err: Device not found or cannot connect");
success=false;
}
return success;
}


public void writeMessage(byte msg, String nxt) throws InterruptedException {
BluetoothSocket connSock;

// Swith nxt socket
if (nxt.equals("nxt2")) {
connSock=socket_nxt2;
} else if(nxt.equals("nxt1")) {
connSock = socket_nxt1;
} else {
connSock=null;
}

if (connSock!=null) {
try {

OutputStreamWriter out = new OutputStreamWriter(connSock.getOutputStream());
out.write(msg);
out.flush();

Thread.sleep(1000);

} catch (IOException e) {
// TODO: Auto-generated catch block
e.printStackTrace();
}
} else {
// Error
}
}

public int readMessage(String nxt) {
BluetoothSocket connSock;
int n;

// Swith nxt socket
if (nxt.equals("nxt2")) {
connSock=socket_nxt2;
} else if (nxt.equals("nxt1")) {
connSock=socket_nxt1;
} else {
connSock=null;
}

if (connSock!=null) {
try {

InputStreamReader in = new InputStreamReader(connSock.getInputStream());
n = in.read();
return n;

} catch (IOException e) {
// TODO: Auto-generated catch block
e.printStackTrace();
return -1;
}
} else {
// Error
return -1;
}
}
}

要从 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();
}

希望这对其他人有帮助...

关于android - Android 和 Lego Mindstorm NXT 之间的蓝牙连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4969053/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com