2016-07-08 80 views
0

我试图从我的Arduino UNO R3向Android平板电脑发送数据形式的数据。我正在以字节的形式发送该数字,并且正如Arduino IDE中的串行监视器所证实的那样,正在从Arduino一侧正确发送数据。但在接收端,数据类型使其不兼容以支持大量数据和数据溢出。字节数据类型的范围从-128到127.所以当我尝试发送一个大于127的数字时,比如说200,显示屏会显示-56。实际上,它以256个字符的周期显示更大的数字。首先它正确地显示到127,然后它到-127否定,继续增加到0并继续从0增加。试图从Arduino发送到Android时大量数据溢出

class MyThread extends Thread 
{ 
    @Override 
    public void run() 
    { 
     int x; 
     String btstring; 

     final ByteBuffer buffer = ByteBuffer.allocate(2); //LINE1 
     UsbRequest request = new UsbRequest(); 
     request.initialize(usbDeviceConnection, endpointIn); 

     while (true) 
     { 

      request.queue(buffer, 1); //LINE2 

      if (usbDeviceConnection.requestWait() == request && DRD==true) 
      { 
       try 
       { 
        x=buffer.get(0); 
        btstring = Integer.toString(x); 

        handler.post(new newthread(btstring)); 
        //Thread.sleep(100); 
       } 
       catch (Exception e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

class newthread implements Runnable 
{ 
    String str0; 

    public newthread(String STR0) 
    { 
     str0 = STR0; 
    } 
    @Override 
    public void run() 
    { 
     if(str0!="0") //to avoid blinking to zero value. 
     { 
      DoseRateDisplay.setText(str0); 
     } 
    } 
} 

下面是Arduino的代码仅供参考:

void setup() 
{ 
    Serial.begin(9600); 
} 

void loop() 
{ 
    Serial.write(200); 
    delay(500); 
} 

我相信的是,两条线标记为LINE1和LINE2代码可能是造成这种短缺的空间传入的数据。我甚至试图改变他们的价值观,但无济于事。可以做些什么来合并大于127的数据?任何不同风格的数据处理也将做到。

回答

0

我建议你使用库来处理接收消息,而不是尝试自己编码串口处理。试试这段代码是我从https://github.com/felHR85/SerialPortExample/blob/master/example/src/main/java/com/felhr/serialportexample/UsbService.java

private UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { 
    @Override 
    public void onReceivedData(byte[] arg0) { 
     try { 
      String data = new String(arg0, "UTF-8"); 
      if (mHandler != null) 
       mHandler.obtainMessage(MESSAGE_FROM_SERIAL_PORT, data).sendToTarget(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
    } 
}; 
+0

把你能解释一下这条线实际上是这样做的:mHandler.obtainMessage(MESSAGE_FROM_SERIAL_PORT,数据).sendToTarget(); – archity

+0

看看我链接的github项目。该行处理收到的数据,将其解析为字符串并通过BroadcasrReciever发送。在你的情况下,这个消息处理将使用handler.post(new newthread(btstring)); – muminers

+0

嘿所以你通过GitHub链接的代码已经被我试过了,而且这个方法有一个不同的问题。它正确显示文本,但连续闪烁。检查此:http://stackoverflow.com/questions/38203558/settext-causing-text-to-flicker-irratically – archity