我有一个关于android蓝牙工作原理的问题。我有一个应用程序连接到arduino与HC-06盾。接收后,我会在第一个字符后获得新行。让我说我从arduino发送
12345
在android中我在ListView中看到
1
2345
我相信这是关于android而不是arduino,因为我将arduino连接到PC并且我收到了正确的数据。
case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;
// construct a string from the valid bytes in the buffer
String readMessage = new String(readBuf, 0, msg.arg1);
mConversationArrayAdapter.add(readMessage);
break;
任何想法如何调试是真的android或者它的arduino失败? 如果你有兴趣我发布arduino代码:
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
修改 关于“\ n”的问题仅出现在arduino + HC-06蓝牙防护罩上。连接到PC时,Android平板电脑显示正确的数据。
答案 0 :(得分:2)
答案是检查字符串结尾。
private void onBluetoothRead(byte[] buffer, int len) {
String output = new String(buffer, 0, len); // Add read buffer to new string
Log.i(LOGGER_TAG, String.format("Received: "+ output + " , " + "%d bytes", len));
outputTemp += output;
if (outputTemp.endsWith("\n")){
m_deviceOutput.append(outputTemp); // Add (not replace) string to TextView
StringTokenizer splitStr = new StringTokenizer(outputTemp, ","); // split string by comma
String numberOne = splitStr.nextToken().replaceAll("\\D+",""); // First split string
String numberTwo = splitStr.nextToken().replaceAll("\\D+",""); // Second split string
m_deviceOutputPrs.setText(numberOne);
m_deviceOutputSpeed.setText(numberTwo);
outputTemp = "";
}
}
答案 1 :(得分:0)
好像你需要更多时间来接收整个信息。您可以将数据附加到同一缓冲区,而不是新缓冲区;或者您可以在检测到新输入数据和读取整个输入数据之间添加一个小延迟。