1

このチュートリアルに従って、Arduino ボードで Android ホスト API の使用を開始しました。Arduino Uno を使用しています。データを送信して Arduino ボードの LED をオンにすることができ、Arduino ボードからフィードバックを受け取ることができます。次のように、ArduinoボードからUSB接続を介してAndroidデバイスに書き込もうとしています:

 Serial.print("Test");

次のように、Android 側で Arduino データを受信して​​います。

byte[] buffer = new byte[10];
int bytes;
//try-catch statements omitted for simplicity
bytes = mUsbConnection.bulkTransfer(mUsbEndpointIn, buffer, buffer.length, 0);

ときどきデータはそのままですが、多くの場合、Arduino から受け取るのは、元のメッセージ (t、e、s、および t) の文字化けしたものです。多くの場合、1 文字または 2 文字しか表示されません。誰かが私を正しい方向に向けたり、同様の経験を共有したりできれば、私は感謝しています. ありがとう。

編集

データを Logcat に出力すると、データのコピーが複数あります。たとえば、Arduino から「ste」を受け取ると、Logcat に 2 ~ 5 回出力されます。

4

1 に答える 1

0

少なくとも一時的に機能するものを見つけたと思います:

public void run(){

        int i = 0;

        byte[] buffer = new byte[4];
        byte[] finalBuffer = new byte[8];
        byte[] sendBuffer = new byte[8];

        int bytes = 0;

        while(true){
            try{

                bytes = mUsbConnection.bulkTransfer(mUsbEndpointIn, buffer, buffer.length, 0);

                if (bytes == EXIT_CMD) { 
                    return;
                } 

                if (bytes > 0){

                    byte[] temporaryBuffer = new byte[bytes];

                    System.arraycopy(buffer, 0, temporaryBuffer, 0, bytes);

                    System.arraycopy(temporaryBuffer, 0, finalBuffer, i, bytes);

                    i += bytes;

                    java.util.Arrays.fill(buffer, (byte) 0);
                }

                //Dollar sign terminates string to indicate end of line
                if (finalBuffer[7] == 36){

                    i = 0;

                    System.arraycopy(finalBuffer, 0, sendBuffer, 0, sendBuffer.length); 

                    messageHandler.obtainMessage(UsbHostTestActivity.ARDUINO_MESSAGE, 
                            sendBuffer.length, -1, sendBuffer).sendToTarget();

                    java.util.Arrays.fill(finalBuffer, (byte) 0);
                }

Arduino から正確に 8 文字の文字列を送信する必要があり、行の終わりを示すためにドル記号 ($) で終わる必要がありましたが、メッセージ ハンドラーに渡されるデータは常に正しいように見えました。これは最も堅牢なソリューションではありませんが、誰かがそれを変更して改善したり、別のアプローチを取ることができるでしょうか? 私にお知らせください!

于 2012-06-19T20:11:45.837 に答える