java - Android 与 Arduino Buffer 的通信不完整

标签 java android arduino buffer

我正在尝试将一些数据从 Arduino 发送到 Android 设备,我看到了一些示例,但通信是从 Android 到 Arduino,但我想接收一些数据示例:

Serial.write("holamundo"); 

通过 OTG,连接成功,但我在使用这段代码时遇到了一些问题。

  @Override
public void run() {
    ByteBuffer buffer = ByteBuffer.allocate(100);
    UsbRequest request = new UsbRequest();
    request.initialize(usbDeviceConnection, endpointIn);
    try{
        while (true) {
            request.queue(buffer, 100);
            if (usbDeviceConnection.requestWait() == request) {
                byte [] bytearray = buffer.array();
                mgsfinal = new String(bytearray, Charset.forName("UTF-8"));

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if(mgsfinal.length()>0){
                            serialText.setText("Bytes: " +mgsfinal); // for UTF-8 encoding);

                        }

                    }
                });
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                }
            } else {
                break;
            }
        }

    }catch(Exception e){
        etemp = e;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                serialText.setText("Bytes: " +etemp.getCause().toString()); // for UTF-8 encoding);

            }
        });
    }
}

我在第一次迭代中收到“hol”,然后我收到“hola”,然后是 hol。但绝不是完整的字符串。

不知道怎么回事。请帮忙。谢谢。

最佳答案

经过几天的调查,我找到了解决方案。

希望这对您有所帮助。

设置此项使通信正常并接受数据。

  usbDeviceConnection = connection;
  usbDeviceConnection.claimInterface(usbInterfaceFound, true);

  usbDeviceConnection.controlTransfer(0x21, 0x22, 0x1, 0, null, 0, 0);



// queue a request on the interrupt endpoint
            request.queue(buffer, buffer.capacity());
            // wait for status event
            if(usbDeviceConnection.requestWait() == request)
            {
                // there is no way to know how many bytes are coming, so simply forward the non-null values

                for(int i = 0; i < buffer.capacity() && buffer.get(i) != 0 ; i++)
                {
                    // transform ascii (0-255) to its character equivalent and append
                    dataByte = Character.toString((char) buffer.get(i));
                    data +=dataByte;
                    Log.e(this.getClass().getSimpleName(), "Was not able to read from USB device, ending listening thread ----> "+ data);


                }
            }

现在联系字符串变量数据

关于java - Android 与 Arduino Buffer 的通信不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28685198/

相关文章:

android - Motorola Razr XT910 (android 2.3) 无法正确显示列表

android - 将目标 targetSdkVersion 和 compileSdkVersion 设置为 26 后,我的 android apk 大小增加了 500kb

c - 许多客户端打印后,Arduino (Uno) 以太网客户端连接失败

arduino - 如何将字符串转换为 float 或整数?

java - 检查 mail.domain.com 是 POP 还是 IMAP

java - HtmlUnitDriver 似乎没有加载页面

android - 回收的 recyclerview 项目保持旧的背景颜色

c - 如何在 ubuntu 14.04 上安装 .c 和 Makefile 驱动程序

java - 如何在 vm 参数中提供 Windows 环境变量值?

java - 如何将模式文本替换为包含基本文本元素的其他文本