gpt4 book ai didi

android - 蓝牙SPP(串行)故障(Android)

转载 作者:行者123 更新时间:2023-12-03 11:55:56 24 4
gpt4 key购买 nike

我遇到一个奇怪的问题。我已经编写了一个应用程序,该应用程序将与arduino建立蓝牙SPP链接。 Arduino上的蓝牙设备配置为9600波特。我可以从arduino接收数据,但是似乎我收到了一些值为0或高峰值的故障。这很烦人,因为我确实需要图形部分的精确值,并且我知道arduino发送好的数据是因为我将其发送的内容记录在文件中。

我正在寻找解决或理解为什么会发生这种情况的方法,而不是创建平均值或类似的方法来制作“补丁”。

谢谢你的帮助。

这是一张可以解释我的问题的图片,arduino数据范围在101到103左右:

Screenshot

这是我创建连接并接收数据的代码:

private class ConnectedThread extends Thread {
private final DataInputStream mmInStream;
private final DataOutputStream mmOutStream;

public ConnectedThread(BluetoothSocket socket) {
InputStream tmpIn = null;
OutputStream tmpOut = null;

// Get the input and output streams, using temp objects because
// member streams are final
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) { }

mmInStream = new DataInputStream(tmpIn);
mmOutStream = new DataOutputStream(tmpOut);
}

public void run() {
byte[] buffer = new byte[1024]; // buffer store for the stream
int bytes; // bytes returned from read()

// Keep listening to the InputStream until an exception occurs
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer); // Get number of bytes and message in "buffer"
hBluetooth.obtainMessage(RECEIVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Send to message queue Handler
} catch (IOException e) {
break;
}
}
}

private void connectDevice() {


BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

try {
btSocket = createBluetoothSocket(device);
} catch (IOException e) {
errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
}


mBluetoothAdapter.cancelDiscovery();


// Establish the connection. This will block until it connects.
Log.d(TAG, "...Connecting...");
try {
btSocket.connect();
Log.d(TAG, "....Connection ok...");
// Create a data stream so we can talk to server.
Log.d(TAG, "...Create Socket...");

mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();
mActionBar.setSubtitle("Connecté");

//If fail, we disconnect or display an error warning regarding the situation
} catch (IOException e) {
try {
btSocket.close();
mActionBar.setSubtitle("Deconnecté");
} catch (IOException e2) {
errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
}
}

return;
}

最后是处理程序:
hBluetooth = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case RECEIVE_MESSAGE: // If we receive a message
byte[] readBuf = (byte[]) msg.obj;
String stringIncome = new String(readBuf, 0, msg.arg1); // Create string from byte array
stringBuilder.append(stringIncome);
int endOfLineIndex = stringBuilder.indexOf("\r\n"); // Determine the end-of-line
if (endOfLineIndex > 0) { // If we are at the end-of-line we parsed all the data that was sent
rmsgBluetooth = stringBuilder.substring(0, endOfLineIndex); // The string is extracted in a string object rmsgBluetooth
stringBuilder.delete(0, stringBuilder.length());


if(btSocket != null && btSocket.isConnected()){


//Here we send the value of the string to a txtbox
txtArduino.setText("Arduino: " + rmsgBluetooth);




if(rmsgBluetooth.matches("-?\\d+(\\.\\d+)?")) {
try{

sensorReading = Float.parseFloat(rmsgBluetooth);
}catch(NumberFormatException e){


}
}

最佳答案

我认为您的错误很可能是在解析字符串时出现的。尝试仔细调试线路

           if(rmsgBluetooth.matches("-?\\d+(\\.\\d+)?")) {                
try{

sensorReading = Float.parseFloat(rmsgBluetooth);
}catch(NumberFormatException e){


}
}

关于android - 蓝牙SPP(串行)故障(Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538575/

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