Arduino + Android USB Host API =错误的软件包

时间:2012-11-14 16:24:48

标签: android api usb arduino host

我正在尝试与运行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);

被使用。

1 个答案:

答案 0 :(得分:1)

您看到的read()行为正在按预期工作:有时,可用的字节数少于您想要的数量。它与standard POSIX read() syscall behavior非常相似:

  

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

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

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