2014-03-25 26 views
0

我正在使用蓝牙串行连接将数据从Arduino发送到Android。这是我在我的Arduino用于发送数据的代码:当我把“侨”从Arduino的串口监听Android和arduino,发送一个字符串如何工作

void inputthread() { 

final Handler handler = new Handler(); 
stopWorker = false; 
workerThread = new Thread(new Runnable() 
{ 
    public void run() 
    { 
    while(!Thread.currentThread().isInterrupted() && !stopWorker) 
    { 
      try 
      { 
      int bytesAvailable = mmInputStream.available();  
      if(bytesAvailable > 0) 
      { 
       byte[] packetBytes = new byte[bytesAvailable]; 
       mmInputStream.read(packetBytes); 
       final String s = new String(packetBytes); 
       final String t = new String("s"); 
       if (s==t) 
        { 
         handler.post(new Runnable() 
         { 

          public void run() 
          { 
           try { 
            closeBT(); 
            } 
           catch (IOException ex) { } 
          } 
         }); 
        } 

       handler.post(new Runnable() 
       { 
        public void run() 
        { 
        // txtaggiorna.setText(s); 
        } 
       }); 

      } 
      } catch (IOException ex) 
      { 
      stopWorker = true; 
      } 
    } 
    } 
}); 

:在我的Android应用程序

char toSend = (char)Serial.read(); 
bluetooth.print(toSend); 

与此代码读取该数据,Android首先显示“C”,然后显示“iao”,但我不知道为什么。

+0

“// txtaggiorna.setText(s);”在原文中没有评论 – user3250541

回答

1

这是您必须考虑的预期结果。任何时候,在逐字符传输和批量传输或打包传输之间转换数据流时,如果不使用旨在保留分组的逻辑,则可能会在多个批次/数据包中分割消息。

您的项目涉及逐个字符的串行传输和打包的蓝牙传输,因此这种分割很可能发生。

重新组合消息的一个相对较差的方法是假设任何以小时间间隔到达的东西成为单个消息,然后假定在时间间隔较长时开始新消息。

一个更健全的机制是声明消息将被终止,例如换行符。在这种情况下,您将在换行符之间获得的所有内容重新组合成一条消息。请注意,数据包/读取呼叫完全可以为您提供一条消息的尾部,换行符,然后开始新消息。

相关问题