1

私のコードは、USB ホストを介して Arduino から Android フォンでデータを受信します。データ (バイト形式) は文字列出力に変換されます。メソッド updateReceivedData(byte[]) にコードを記述し、データに「警告」ワードが含まれているかどうかをチェックして、警告データを含むメッセージを送信します。

警告メッセージが連続して受信された場合にメッセージを送信する間に遅延を作るためにカウンターを作成しようとします。警告メッセージがない場合はカウンターをリセットします

私の問題は、カウンターが毎回リセットされ、遅延なくメッセージを送信し続けることです。

解決策は、文字列の出力が完了するまで遅延させてから確認することだと思いますが、方法がわかりませんか?

private void updateReceivedData(byte[] data) throws UnsupportedEncodingException {
    String Output = new String(data);
    if(Output.contains("Warning")){
        if (warncounter==0){
            Toast.makeText(getBaseContext(), "Warning message sent", Toast.LENGTH_SHORT).show();
            SmsManager.getDefault().sendTextMessage(number, null, Output, null, null);          
        }
        warncounter++;
        if(warncounter==52) warncounter=0;
    }
    else warncounter=0;
    mDumpTextView.append(Output);
    mScrollView.smoothScrollTo(0, mDumpTextView.getBottom());
    }

問題を見つけるためのアプローチを作成するために、このコードを試します

private void updateReceivedData(byte[] data) throws UnsupportedEncodingException {
    String Output = new String(data);
    if(Output.contains("Warning")){
              SmsManager.getDefault().sendTextMessage(number, null, Output, null, null);
            }
    }
    mDumpTextView.append(Output);
    mScrollView.smoothScrollTo(0, mDumpTextView.getBottom());
    }

2 番目のコードでは、すべての受信データに警告を含めます。その結果、最初のメッセージには出力文字列全体が含まれますが、最初のメッセージの後、すべての受信メッセージが削除されます (データが開始前に完全に文字列に変換されなかったことが原因である可能性があります)。送信文字列)

注: データは Arduino から 1 秒ごとに送信され、スクロールビュー テキストのデータは 100% 正しく表示されます (これは、データが String に変換されたことを示しますが、問題はおそらく時間がかかることです)。

ですから、助けてください、または提案してください

4

1 に答える 1

0

私は問題を見つけました 問題は、androidがarduinoから送信されたデータ全体を(Serial.print()を使用して)単一のbulktransfer()関数呼び出しで読み取ることができないため、whileループでbulktransfer()を作成(または読み取り)することです。次に、読み取ったデータで新しい行 ("\n") が検出されるたびに文字列を作成して、arduino から送信された各スティングをチェックします。

于 2013-12-12T19:18:23.343 に答える