Ler peso balança Serial + Criando um listener

Amigos, boa tarde.
Estou com uma dúvida besta, tenho uma classe que aprendi por esse link que está está comunicando normal com minha balança serial, porém eu não consigo pegar o peso da mesma.

Na minha classe principal (feito no netbeans), eu chamo minha outra classe ’ SerialComLeitura '.

public Principal() { initComponents(); //Iniciando leitura serial SerialComLeitura leitura = new SerialComLeitura("COM3", 9600, 0); leitura.HabilitarLeitura(); leitura.ObterIdDaPorta(); leitura.AbrirPorta(); leitura.LerDados(); try { Thread.sleep(500); } catch (InterruptedException ex) { System.out.println("Erro na Thread: " + ex); } leitura.FecharCom(); }
O retorno que tenho é sucesso em: obter Id porta,Abrir comunicaçao, Lerdados, Thread e em fechar porta.

na função

leitura.LerDados();

Ele me retorna null.

Pelo que andei lendo e pesquisando aqui no fórum com dúvidas similares, eu tenho que colocar um listener na minha função SerialPortEvent, mas não sei como fazer isso. Segue meu código.

[code]
public void run(){
try {
Thread.sleep(5);
//NÃO ESTOU FAZENDO NADA AQUI.
// TENHO QUE CHAMAR A FUNÇÃO serialEvent AQUI, COMO FAZER ISSO COM SerialPortEvent ?
} catch (InterruptedException e) {
System.out.println("Erro de Thread: " + e);
}}

public void serialEvent(SerialPortEvent ev){
StringBuffer bufferLeitura = new StringBuffer();
int novoDado = 0;

    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:
            //Novo algoritmo de leitura.
            while(novoDado != -1){
                
                try{
                    novoDado = entrada.read();
                    if(novoDado == -1){
                        break;
                    }
                    if('\r' == (char)novoDado){
                        bufferLeitura.append('\n');
                    }else{
                        bufferLeitura.append((char)novoDado);
                    }
                }catch(IOException ioe){
                    System.out.println("Erro de leitura serial: " + ioe);
                }}
            setPeso(new String(bufferLeitura));
            System.out.println(getPeso());
        break;}}[/code]

Enfim, pelo que percebi, meu código nao executa o método serialEvent, por que?

Obrigado pela ajuda.

Olá, quando eu precisei capturar o peso

eu utlizei o RXTX e o seguinte código:

[code]import java.io.UnsupportedEncodingException;

import jssc.SerialPort;

import jssc.SerialPortException;

import jssc.SerialPortList;

public class Main {

public static void main(String[] args) throws UnsupportedEncodingException {
String[] portNames = SerialPortList.getPortNames();
for (String portName : portNames) {
System.out.println(portName);
}

SerialPort serialPort = new SerialPort("COM3");
try {
    System.out.println("Port opened: " + serialPort.openPort());
    System.out.println("Params setted: " + serialPort.setParams(9600, 8, 2, 0));
    System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));
    byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port
    System.out.println(new String(buffer));
    System.out.println("Port closed: " + serialPort.closePort());
} catch (SerialPortException ex) {
    System.out.println(ex);
}

}

}[/code]

só fazer o ajuste que precisa…

Abraços

Já testou se é um problema no Hardware? Se os dados que a balança envia estão corretos? Tá importando as classes corretamente?

Javalente, obg pela resposta.
Eu já usei esse mesmo código para enviar dados para uma impressora zebra usando códigos ZPL e funcionou perfeitamente, no debug que faço pra ver se a comunicação está certa, ele me retorna positivo. Algumas pessoas dizem que preciso pegar informações com o fornecedor, outros dizem que preciso enviar um comando para a balança e o fabricante (Toledo) me disse que preciso comprar um aparelho pra comunicar (PC-link), não entendi porque, visto que tenho comunicação serial.

Mais uma vez, obrigado pela ajuda.

[quote=himorrivel]Olá, quando eu precisei capturar o peso

eu utlizei o RXTX e o seguinte código:

[code]import java.io.UnsupportedEncodingException;

import jssc.SerialPort;

import jssc.SerialPortException;

import jssc.SerialPortList;

public class Main {

public static void main(String[] args) throws UnsupportedEncodingException {
String[] portNames = SerialPortList.getPortNames();
for (String portName : portNames) {
System.out.println(portName);
}

SerialPort serialPort = new SerialPort("COM3");
try {
    System.out.println("Port opened: " + serialPort.openPort());
    System.out.println("Params setted: " + serialPort.setParams(9600, 8, 2, 0));
    System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));
    byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port
    System.out.println(new String(buffer));
    System.out.println("Port closed: " + serialPort.closePort());
} catch (SerialPortException ex) {
    System.out.println(ex);
}

}

}[/code]

só fazer o ajuste que precisa…

Abraços
[/quote]

himorrivel, obg pela ajuda, vou testar o código e te aviso ok?

Abraços;

[UPDATE]

Testei aqui e não funcionou, está estranho não pegar esses dados, ele só me retornou:

COM3
Port opened: true
Params setted: true
successfully writen to port: true

ele não chega a executar :

System.out.println(new String(buffer)); System.out.println("Port closed: " + serialPort.closePort());

Obrigado pela ajuda;

então… essa é a configuração da balança que eu utilizei, cada balança possui um padrão… vai vai precisar ver os padrões de sua balança e fazer a adaptação no código…

Abraços

[quote=himorrivel]então… essa é a configuração da balança que eu utilizei, cada balança possui um padrão… vai vai precisar ver os padrões de sua balança e fazer a adaptação no código…

Abraços[/quote]

Estou vendo isso agora, estou com o manual da balança.

No meu caso, ficou assim:

System.out.println("Params setted: " + serialPort.setParams(1200, 7, 2, 0)); //Bits por segundo: 1200 //Bits de dados: 7 //Paridade: nenhum // Bits de parada: 2 // Controle de fluxo - na propriedades do meu hardware está como nenhum (mas nao sei o que é).

Mas ainda sem resultados, vou continuar testando, vlw.

agora, faltou um detalhe:

System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));  

essa linha, é a linha de comando que eu faz a solicitação da balanca, isso tb muda de balanca para balanca…

e apoveito para falar que essa linha:
[/code]byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port [code]

tb muda de balanca para balanca…

Abraços

[quote=himorrivel]agora, faltou um detalhe:

System.out.println("successfully writen to port: " + serialPort.writeBytes(new byte[]{0x04}));  

essa linha, é a linha de comando que eu faz a solicitação da balanca, isso tb muda de balanca para balanca…

e apoveito para falar que essa linha:

byte[] buffer = serialPort.readBytes(46);//Read 10 bytes from serial port  

tb muda de balanca para balanca…

Abraços
[/quote]

Legal, vou pesquisar sobre isso, pois agora estou recebendo retorno, alguns caracteres estranhos, deve ser por causa dos bytes que estou enviando.

Mais uma vez obrigado, abraços;