0

4.0.3を実行しているAndroidタブレットからArduinoUnoを操作しようとしていますが、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()必要な数になるまでバイトを累積して、連続した呼び出しを実行することです。

最後に、FTDIおよびCDC(Arduino)USBドライバーを実装するオープンソースライブラリであるusb-serial-for-androidの使用を検討してください。このアプリケーションレベルの問題を具体的に扱っているわけではありませんが、他の場所でのトラブルを防ぐことができ、アクティブなメーリングリストがあります。

于 2012-11-15T09:06:27.657 に答える