Capturando peso balança filizola mf-30 com java

Boa tarde a todos, estou tentando desenvolver uma aplicação para capturar o peso de uma balança filizola mf-30 com java, mas sem sucesso!

No código que estou fazendo, utilizei a biblioteca jSerialComm.

A balança está conetada e comunicando na porta COM3, porque testei com outro software.

import com.fazecast.jSerialComm.SerialPort;


public class testeLeituraSerial {

    public static void main(String[] args) {
   // Configuração da porta serial
        SerialPort comPort = SerialPort.getCommPort("COM3"); // Substitua "COM1" pela porta correta
        comPort.setComPortParameters(9600, 8, SerialPort.ONE_STOP_BIT, SerialPort.NO_PARITY);
        comPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

        if (comPort.openPort()) {
            System.out.println("Porta serial aberta com sucesso!");

            try {
                // Envio do comando para capturar o peso (consulte o manual da balança para o comando correto)
                String command = "P"; // Exemplo de comando para solicitar o peso (de acordo com o protocolo da balança)
                
                comPort.getOutputStream().write(command.getBytes());

                // Leitura da resposta da balança
                byte[] buffer = new byte[1024];
                int bytesRead = comPort.getInputStream().read(buffer);
                String response = new String(buffer, 0, bytesRead);

                // Tratamento da resposta para extrair o peso
                System.out.println("Peso capturado: " + response.trim());

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                comPort.closePort();
            }

        } else {
            System.out.println("Erro ao abrir a porta serial.");
        }
    }
}

Não retorna o peso. Alguém tem ideia do que está errado. Ou uma sugestão melhor para fazer isso…

Não retorna nada? Tentou forçar o “flush
Testou escrevendo mais coisas no COM3? Não precisa que mandar cabeçalho nem nada?

sinceramente não sei o que precisa. O protocolo está correto. Testei a comnunicao com um software. Parece que algumas balanças necessitam que uma string para mandar o peso de volta. Não achei o manual dessa balanca em especifico.

E como vc sabe que está bandando os bytes esperados pela balança?

Acabei descobrindo, precisa enviar a string “\u0005” que a balanca vai retornar o peso…

package MAIN;
import com.fazecast.jSerialComm.SerialPort;

public class SerialCommunication {

    private SerialPort serialPort;

    public void initialize() {
        // Obter todas as portas seriais disponíveis
//        SerialPort[] ports = SerialPort.getCommPorts();
//        for (SerialPort port : ports) {
//            System.out.println("Porta disponível: " + port.getSystemPortName());
//        }

        // Configurar a porta serial COM3
        serialPort = SerialPort.getCommPort("COM3");
        serialPort.setBaudRate(9600);
        serialPort.setNumDataBits(8);
        serialPort.setNumStopBits(SerialPort.ONE_STOP_BIT);
        serialPort.setParity(SerialPort.NO_PARITY);

        // Abrir a porta serial
        if (serialPort.openPort()) {
            System.out.println("Porta serial aberta com sucesso.");
        } else {
            System.out.println("Falha ao abrir a porta serial.");
            return;
        }

        // Configurar a leitura de dados
        serialPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING, 500, 0);
    }

    public void setarComando(String command) {
        if (serialPort != null && serialPort.isOpen()) {
            byte[] commandBytes = command.getBytes();
            serialPort.writeBytes(commandBytes, commandBytes.length);
           // System.out.println("Comando enviado: " + command);
        } else {
            System.out.println("Porta serial não está aberta.");
        }
    }

    public String lerReposta() {
        if (serialPort != null && serialPort.isOpen()) {
            byte[] readBuffer = new byte[1024];
            int numRead = serialPort.readBytes(readBuffer, readBuffer.length);
            String response = new String(readBuffer, 0, numRead).trim();
            System.out.println("Resposta da balança: " + response);
            return response;
        } else {
            System.out.println("Porta serial não está aberta.");
        }
        return "";
    }

    public void close() {
        if (serialPort != null && serialPort.isOpen()) {
            serialPort.closePort();
            System.out.println("Porta serial fechada.");
        }
    }

    public static void main(String[] args) {
        SerialCommunication serialComm = new SerialCommunication();
        serialComm.initialize();

        
        while(true){
        // Comando para solicitar o peso (verifique o comando correto para sua balança)
        String command = " \u0005";  // Exemplo de comando, substitua com o comando correto para sua balança
        serialComm.setarComando(command);

        // Ler a resposta da balança
        serialComm.lerReposta();
        }
        // Fechar a conexão
      //serialComm.close();
    }
}

Era o que eu estava tentando lhe dizer.