我正在构建一个Android应用程序,使用蓝牙从Arduno发送和接收值。当超声波传感器在附近发现物体时,Arduino发送字符串“OBJECT_FOUND”。
我正在使用从教程中获取的代码。有时,当超声波传感器位于物体前面时,可以看到arduino发送的值,但是接收数据需要很长时间,并且大部分时间都不可能看到发送的值。时间对我的系统运行至关重要,我希望能够实时接收数据。
以下是代码:
public void beginListenForData() {
final Handler handler = new Handler();
final byte delimiter = 10; //This is the ASCII code for a newline character
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable() {
public void run() {
while (!Thread.currentThread().isInterrupted() && !stopWorker) {
try {
int bytesAvailable = mmInputStream.available();
if (bytesAvailable > 0) {
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for (int i = 0; i < bytesAvailable; i++) {
byte b = packetBytes[i];
if (b == delimiter) {
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable() {
public void run() {
if (data.equals("OBJECT_FOUND")) {
anyObject = true;
} else {
anyObject = false;
}
}
});
} else {
readBuffer[readBufferPosition++] = b;
}
}
}
} catch (IOException ex) {
stopWorker = true;
}
}
}
});
workerThread.start();
}
我应该避免发送一个“大”字符串,只发送0和1来增加进程吗?
滞后可能是另一个问题造成的,我正在试图找出问题所在。
谢谢。