通过USB主机检查来自arduino的数据到android

时间:2013-11-04 17:44:27

标签: android

我的代码通过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());
    }

在第二个代码中,我让所有收到的数据都包含警告,结果是第一个消息包含整个输出字符串,但在第一个消息之后,所有收到的消息都被修剪(可能是由于数据没有完全转换为开始发送字符串之前的字符串)

注意:数据每隔一秒从Arduino发送一次,滚动视图文本中的数据100%正确显示(这表示数据已转换为字符串,但问题可能是需要时间)

请帮助或提出建议

1 个答案:

答案 0 :(得分:0)

我发现了问题 问题是android无法通过单个bulktransfer()函数调用读取arduino发送的整个数据(使用Serial.print()),所以我在while循环中进行bulktransfer()(或读取),然后我检查arduino通过在readed数据中检测到每个新行(“\ n”)时构建一个String发送的每个Sting