Arduino + Android USB Host API = 有问题的软件包



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

被使用。

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

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

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

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

相关内容

最新更新