我正在尝试与运行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);
被使用。
答案 0 :(得分:1)
您看到的read()
行为正在按预期工作:有时,可用的字节数少于您想要的数量。它与standard POSIX read() syscall behavior非常相似:
“如果此数字小于请求的字节数,则不是错误;例如,这可能发生,因为现在实际可用的字节数更少[...]”
您的应用需要处理这种可能性。一种常见的技术是跟踪您已读取的字节数,并执行连续的read()
次调用,累积字节直到您拥有所需的数字。
最后,考虑使用usb-serial-for-android,一个实现FTDI和CDC(Arduino)USB驱动程序的开源库。虽然它没有专门处理这个应用程序级别的问题,但它可以在其他地方省去你的麻烦,并且有一个活跃的邮件列表。