2017-02-22 44 views
1

我遇到了一些與arduino有關的問題。在課堂上,我們正在學習arduino/java通信。因此,我們被要求解釋從arduino發送的字節,並在eclipse的控制檯中寫出它,因爲消息的「關鍵」告訴我們寫入它的任何類型。嘗試使用eclipse從Arduino中讀取時獲取不完整的消息?

截至目前,我只是測試輸入流,但我似乎無法得到一個完整的消息。這是我在做什麼:

public void run() throws SerialPortException { 
    while (true) { 
     if (port.available()) {  //code written in another class, referenced below 
      byte byteArray[] = port.readByte(); //also code written in another class, referenced below 
      char magicNum = (char) byteArray[0]; 
      String outputString = null; 
      for (int i = 0; i < byteArray.length; ++i) { 
       char nextChar = (char) byteArray[i]; 
       outputString += Character.toString(nextChar); 
      } 
      System.out.println(outputString); 
     } 

    } 
} 
下面

是來自在上面的代碼中使用的其它類的代碼

public boolean available() throws SerialPortException { 
    if (port.getInputBufferBytesCount() == 0) { 
     return false; 
    } 
    return true; 
} 

public byte[] readByte() throws SerialPortException { 
    boolean debug= true; 
    byte bytesRead[] = port.readBytes(); 
    if (debug) { 
     System.out.println("[0x" + String.format("%02x", bytesRead[0]) + "]"); 
    } 
    return bytesRead; 
} 
+0

我忘了提及,我從arduino接口輸入的輸入流是「這是一個測試」,我得到的輸出如「nullthis是a」和「nulla test」或者只是「null」 – Harrison

回答

0

這是不可能知道數據將是可用的,也不是是否輸入數據將一次全部可用,而不是幾個塊。

這是一個快速和骯髒的修復

public void run() throws SerialPortException { 
    String outputString = ""; 
    while (true) { 
     if (port.available()) { 
      byte byteArray[] = port.readByte(); 

      for (int i = 0; i < byteArray.length; ++i) { 
       char nextChar = (char) byteArray[i]; 

       if (nextChar == '\n') { 
        System.out.println(outputString); 
        outputString = ""; 
       } 

       outputString += Character.toString(nextChar); 
      } 
     } 
    } 
} 

outputString聲明被移出,並且被分配""所以要獲得標準輸出擺脫這種醜陋null

每次\n串行輸入數據遇到的outputString內容打印在標準輸出第一和之後清零。

相關問題