【问题标题】:Arduino + Android USB Host API = faulty packagesArduino + Android USB Host API = 错误包
【发布时间】:2012-11-03 04:29:08
【问题描述】:

我正在尝试通过运行 4.0.3 的 Android 平板电脑与我的 Arduino Uno 进行交互,并使用 Android USB Host API 让一切正常工作,这意味着我可以通过 USB 将数据发送到开发板并通过 @ 在那里读取数据987654322@成功。

现在我正在尝试实现反馈功能,这意味着反过来,从 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);

已使用。

【问题讨论】:

  • 你能发布相关代码以及它失败的数据吗?否则这个问题太模糊了。
  • 只是尝试传输少量数据(例如不超过 10 个字节)。添加代码作为编辑

标签: android api usb arduino host


【解决方案1】:

您看到的read() 行为按预期工作:有时,可用字节数少于您想要的数量。和standard POSIX read() syscall behavior很像:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2017-05-15
    • 2011-10-22
    • 2011-10-27
    • 2011-06-17
    • 2012-08-07
    • 1970-01-01
    相关资源
    最近更新 更多