Olá galera to com um mega problema preciso urgente ler dados da porta serial para um trabalho, mais não estou conseguindo se alguem identificar o motivo por favor me ajude, eis o código:
//Programa modificado em 02/09/2007
//Enviar dado para porta serial
// Configuração da porta serial
//Autor: Eng. Eletr. Edson Antonio BAtista
//Versão 10.1
//Importação das classes que serão utilizadas
import java.io.*;
import java.util.*;
import javax.comm.*;
import javax.swing.JOptionPane;
//Definição do nome do programa e implementando as interfaces
//public class serial12 implements Runnable, SerialPortEventListener {
public class serial12 extends Thread implements SerialPortEventListener {
//Declaração de variaveis global
static CommPortIdentifier portId; //Classe para identificar a porta
static Enumeration portList; //Lista de portas
static OutputStream outputStream; //escreve
static InputStream inputStream; //lê
static SerialPort serialPort;
Thread readThread;
//necessario
public static void main(String[] args) throws Exception {
// serial12 w;
// w = new serial12();
// w.gerenciarControle();
//Inicia a identificação da porta
try {
portList = CommPortIdentifier.getPortIdentifiers();
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getName().equals("COM1")) {
break;
}
}
// Declaração genérica
} catch (Exception ex1) {
System.out.println("Erro de identificação da porta da porta 1" + ex1);
}
new serial12();
System.out.println("Prepare a COM1 para comunicacao ");
}
public serial12() {
System.out.println("PAssou aqui");
//Declaração de exceção para os métodos (definidos pelas classes)
try {
serialPort = (SerialPort) portId.open("serial12App", 3000);
} catch (PortInUseException e) {}
try {
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
} catch (UnsupportedCommOperationException e) {}
System.out.println("PAssou aqui"); // Mensagem que até aqui não teria erro
//String opcoes;
System.out.println("Opcoes \n-----------------------------");
System.out.println("0 - Finalizar Programa");
System.out.println("1 - Enviar Comando");
System.out.println("2 - Receber Dados");
String opcoes = JOptionPane.showInputDialog("Entre com a opcao desejada");
int opc = Integer.parseInt(opcoes);
if(opc == 1) {
//while(true) { //Gera um loop para ligar/desligar os motores
System.out.println("Opcoes \n-----------------------------");
System.out.println("1 - Liga o Motor");
System.out.println("0 - Desliga o Motor");
String valor = JOptionPane.showInputDialog("Qual a opção desejada?");
int op = Integer.parseInt(valor);
int valores = -1;
int dura = -2;
try {
outputStream = serialPort.getOutputStream();
//while(true) {
outputStream.write(valores);
try {
Thread.sleep(1000);
} catch (Exception tryio) {}
outputStream.flush();
System.out.println("byte " + valores + " enviado...");
System.out.println("Com o tempo de " + " 1" + " ms");
outputStream.close();
} catch (IOException rsio) {}
if(op == 1) {
System.out.println("O Motor foi ligado com sucesso \n-----------------------------");
}
if(op == 0) {
System.out.println("O Motor foi desligado com sucesso \n-----------------------------");
}
//}
}
//fim do while do loop}
if(opc == 2) {
System.out.println("Opção de leitura \n-----------------------------");
try {
inputStream = serialPort.getInputStream();
System.out.println("FLUXO OK!");
} catch (Exception e) {
System.out.println("Erro.STATUS: " + e );
System.exit(1);
}
try {
serialPort.addEventListener(this);
System.out.println("SUCESSO. Porta aguardando...");
} catch (Exception e) {
System.out.println("Erro ao criar listener: ");
System.out.println("STATUS: " + e);
System.exit(1);
}
serialPort.notifyOnDataAvailable(true);
try {
//Thread threadLeitura = new Thread(this);
start();
} catch (Exception e) {
System.out.println("Erro ao iniciar leitura: " + e );
}
}
}
public void run() {
System.out.println("Entrou no Run");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {}
System.out.print("Final do run \n" );
}
//}
//gerenciador de eventos de leitura na serial
public void serialEvent(SerialPortEvent ev) {
System.out.println("Entrou no serialEvent");
switch (ev.getEventType()) {
//System.out.println("Entrou no serialEvent");
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[20];
try {
while (inputStream.available() > 0) {
int numBytes = inputStream.read(bufferLeitura);
}
System.out.print(new String(bufferLeitura));
//System.out.print(numBytes);
} catch (IOException e) {}
break;
//} catch (Exception e) {
//System.out.println("Erro durante a leitura: " + e );
}
}
}
Peguei o exemplo de leitura de um artigo, mais não entendi como ele vai chamar o metodo serialEvent, sendo que não tem nada chamando ele, e todos exemplos que vi de leitura nenhum chama esse metodo, como é possivel??
Abraços