尝试从Arduino发送到Android时,大量数据溢出

时间:2016-07-08 06:45:07

标签: java android arduino byte

我正在尝试以数字的形式从我的Arduino UNO R3发送数据到Android平板电脑。我正在以字节的形式发送数字,正在从Arduino端正确发送,这是从Arduino IDE中的串行监视器确认的。但是在接收端,数据类型使得它不兼容支持大数字和数据溢出。字节数据类型的范围是-128到127.因此,当我尝试发送大于127的数字(例如200)时,显示屏显示-56。事实上,它以256个字符的周期显示更大的数字。首先它正确地显示到127,然后它否定为-127,继续一直增加到0并继续从0再次增加。

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的数据?任何不同风格的数据处理也可以。

1 个答案:

答案 0 :(得分: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();
        }
    }
};