0

我正在尝试从运行 4.0.3 的 Android 平板电脑上与我的Arduino Uno交互,并使用 Android USB Host API 让一切正常工作,这意味着我可以通过 USB 将数据发送到板上并Serial.read()成功读取。

现在我正在尝试实现反馈功能,这意味着反过来,从 Arduino Uno 发送并在平板电脑上阅读。这也很好用Serial.write(),但我遇到了一个小问题:有时,没有传输字节,而其他时候,只有其中的一些,所以我发送的内容被削减了一半。我该如何解决?

我假设串行端口在发送所有数据时存在一些问题。我是否应该更改当前为 9600 的波特率?

这是Android端的代码:

byte[]data = new byte[1024]; //Bigger size just to make sure...
int returnLen = conn.bulkTransfer(epIN,data,data.length,500); //epIN is the` 

在 Arduino 方面,一个简单的

Serial.write(5);

用来。

4

1 回答 1

1

您看到的read()行为按预期工作:有时,可用字节数少于您想要的数量。它与标准 POSIX read() 系统调用行为非常相似:

“如果此数字小于请求的字节数,这不是错误;这可能会发生,例如,因为现在实际可用的字节数较少 [..]”

您的应用程序需要处理这种可能性。一种常见的技术是跟踪您已读取的字节数,并执行连续read()调用,累积字节直到您获得所需的数量。

最后,考虑使用usb-serial-for-android,这是一个实现 FTDI 和 CDC (Arduino) USB 驱动程序的开源库。虽然它没有专门处理这个应用程序级别的问题,但它可能会在其他地方为您省去麻烦,并且有一个活动的邮件列表。

于 2012-11-15T09:06:27.657 回答