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());
    }

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

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

所以请帮助或提出建议

4

1 回答 1

0

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

于 2013-12-12T19:18:23.343 回答