Java串行通信Arduino

时间:2018-02-02 18:59:33

标签: java arduino

我一直在做一个项目,要求我过滤我的Arduino上收到的消息,传递给我的Java程序。

所以,我在我的Arduino上收到这个字符串(示例),并试图在我的Java程序中过滤它:<4;0;date;2;1,11,2,22,3,33,4,44>

如果你注意到,数据是用分号分割的,但是发生的事情是我没有收到最后一段数据,用逗号分隔,丢失了最后两段数据,所以要指定,这就是我在java程序中作为字符串收到的内容:<4;0;date;2;1,11,2,22,3,33,

这是我的Java代码中我过滤消息的部分:

        try {
        while ((len = this.in.read(buffer))> -1){

             s = new String(buffer,0,len);

             fields = s.split(";"); 
             if (fields.length == 6){
                 System.out.println(s);
                 int source = Integer.valueOf(fields[1]);
                 String hora = fields[2];
                 int tipoMensagem = Integer.valueOf(fields[3]);
                 int compr = Integer.valueOf(fields[4]);
                 String data = fields[5];
                 System.out.println(data);
                 dados = data.split(",");

                 System.out.println("Origem: " + source + "; Hora: " + hora + "; Tipo de Mensagem: " + tipoMensagem + "; Comprimento: " + compr);

             }
        }
    }catch (IOException e){
        System.out.println(e);
    }
}

1 个答案:

答案 0 :(得分:0)

让我们假设在运行代码后我们正确读取了缓冲区我检测到代码中的错误很少(错误的索引和变量的错误类型tipoMensagem

这将是正确的:

String s = "4;0;date;2;1,11,2,22,3,33,4,44";

String [] fields = s.split(";"); 

System.out.println(s);
int source = Integer.valueOf(fields[0]);
String hora = fields[1];
String tipoMensagem = fields[2];
int compr = Integer.valueOf(fields[3]);
String data = fields[4];
System.out.println(data);
String [] dados = data.split(",");

 System.out.println("Origem: " + source + "; Hora: " + hora + "; Tipo de Mensagem: " + tipoMensagem + "; Comprimento: " + compr);