2014-06-20 140 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