2014-06-20 136 views
1

我有一个关于android蓝牙工作原理的问题。我有一个应用程序,连接到arduino HC-06盾。并且在接收到第一个字符后我得到新的行。可以说,我从Arduino的Android + 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

为什么不使用BufferedReader和readLine()? kirill –

回答

1

答案是检查字符串结尾。

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 = ""; 
     } 
    } 
0

似乎你需要更多的时间来接收整个消息。您可以将数据追加到相同的缓冲区,而不是新的数据;或者您可能会在检测到新输入数据的时间与读取整个输入数据的时间之间增加一个小延迟。

+0

你如何建议延迟?以及如何将数据追加到相同的缓冲区?更具体一点:)我不是java的专家... – Martynas