Imprimir dados de forma continua recebidos de uma balança

2 respostas
P

Pessoal ler a serial é tranquilo, contudo preciso ficar exibindo os dados e alterar conforme a balança manda sinais diferentes, sem ter que ficar clicando em botão para iniciar a leitura, já tentei de várias formas mas não caiu a ficha ainda.
Faço o seguinte tenho um loop while que vai lendo os dados e carregando um ArrayList, a partir daí eu monto os dados e exibo na tela. Mas quando eu altero o peso na tela continua o peso antigo. Alguém pode me ajudar?
Segue abaixo o loop de leitura e de montagem dos dados para exibição:

public void serialEvent(SerialPortEvent ev){
switch (ev.getEventType()) {
case SerialPortEvent.BI:
case SerialPortEvent.OE:
case SerialPortEvent.FE:
case SerialPortEvent.PE:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.RI:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
break;
case SerialPortEvent.DATA_AVAILABLE:
byte[] bufferLeitura = new byte[16];
try {
while ( entrada.available() > 0 ) {
nodeBytes = entrada.read(bufferLeitura);
}
String dadosLidos = new String(bufferLeitura);
if (bufferLeitura.length == 0) {
    JOptionPane.showMessageDialog(null,
                    "Nada foi lido. Verifique a balança!",
                    "Aviso!",
                    JOptionPane.WARNING_MESSAGE);
//System.out.println("Nada lido!");
} else if (bufferLeitura.length == 1 ){
    JOptionPane.showMessageDialog(null,
                    "Apenas 1 byte foi lido. Verifique a balança!",
                    "Aviso!",
                    JOptionPane.WARNING_MESSAGE);
//System.out.println("Apenas um byte foi lido!");
} else { 
    dadosTotal.add(dadosLidos);
}
} catch (Exception e) {
    JOptionPane.showMessageDialog(null,
                    "Erro durante leitura! STATUS: " + e,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
//System.out.println("Erro durante a leitura: " + e );
}
//System.out.println("n.o de bytes lidos : " + nodeBytes );
break;
}
}
public void ImprimeArray(){
Iterator it = dadosTotal.iterator();
int index;
String str;
for (int i = 0; i < dadosTotal.size(); i++) {
    try{
    str = (String)it.next();
    index = str.indexOf('p');
    if (index > -1){
        String pesoTotal;
        pesoTotal = dadosTotal.get(i + 1).toString().substring(0, 2) +
                "," +
                dadosTotal.get(i + 2).toString().substring(0, 2) +
                dadosTotal.get(i + 3).toString().substring(0, 2);
        Main.jTextFieldPeso.setText(pesoTotal);
        i = dadosTotal.size();
    }
}catch(ConcurrentModificationException cme){
    JOptionPane.showMessageDialog(null,
                    "Erro de concorrência. Tente novamente! STATUS: " + cme,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
}
}
dadosTotal.clear();
run();
}

Chamada em um botão para iniciar o primeiro processo de leitura que deveria ficar interminente.

LeituraCOM3 st2 = new LeituraCOM3();
            if ( st2.PortaExiste("COM1") == true) {
            //System.out.println("Iniciando comunicação!");
            SerialComLeituraCOM3 sc2 = new SerialComLeituraCOM3("COM1",4800,999999999);
            sc2.HabilitarLeitura();
            sc2.ObterIdDaPorta();
            sc2.AbrirPorta();
            sc2.LerDados();
            try {                
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                JOptionPane.showMessageDialog(null,
                    "Erro na THREAD de leitura serial! STATUS: " + ex,
                    "Erro!",
                    JOptionPane.ERROR_MESSAGE);
            }
            sc2.ImprimeArray();
            //sc2.FecharCom();
            }

2 Respostas

Mauricio_Linhares

Pra remover todos os objetos de uma coleção basta chamar “clear()” nela.

P

Valeu isso agora tá funfando legal, mas para deixar os dados serem atualizados de forma dinamica tá soda.

Criado 5 de setembro de 2006
Ultima resposta 5 de set. de 2006
Respostas 2
Participantes 2