Ir ao conteúdo
  • Cadastre-se

Problema com comunicação serial em java com Arduino


Posts recomendados

Estou fazendo um programa para, primeiramente, ler uma informação do Arduino Leonardo pela porta serial. Revisei o programa diversas vezes e não encontro erro, porém não estou conseguindo captar as informações do arduino. Utilizando a serial da IDE arduino é possível verificar que o arduino está enviando normalmente as informações. Quando executo o meu programa a conexão é estabelecida porém não retorna nenhum valor enviado. Por favor, preciso de ajuda urgentemente.

OBS.: Há, ainda, uma classe protocolo e outra supervisório. Estas já foram testadas e funcionam normalmente.

package Serial;import gnu.io.CommPortIdentifier;import gnu.io.SerialPort;import gnu.io.SerialPortEvent;import gnu.io.SerialPortEventListener;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.OutputStream;import java.util.Enumeration;/** * * @author dewes_000 */public class SerialRxTx implements SerialPortEventListener {    SerialPort serialPort = null;        private Protocolo protocolo = new Protocolo(); //Objeto de gestão de protocolo    private String appName; //Nome da aplicação        private BufferedReader input; //objeto para leitura na serial    private OutputStream output; //objeto para escrita na serial        private static final int TIME_OUT = 1000; //define o tempo de espera de comunicação    private static int DATA_RATE = 9600; //velocidade da comunicação        private String serialPortName = "COM6";        public boolean iniciaSerial() {        boolean status = false;                try {            //Obtém portas seriais do sistema                        CommPortIdentifier portId = null; //identificador de porta serial            Enumeration portEnum = CommPortIdentifier.getPortIdentifiers(); //recebe em ordem as portas cadastradas no SO                                      while(portId == null && portEnum.hasMoreElements() ) {                CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();                                                if(currPortId.getName().equals(serialPortName) || currPortId.getName().startsWith(serialPortName)) {                    serialPort = (SerialPort) currPortId.open(appName, TIME_OUT);                    portId = currPortId;                                         System.out.println("Conectado em " + currPortId.getName());                    break;                }            }                        if(portId == null || serialPort == null) {                return false;            }                        serialPort.setSerialPortParams( DATA_RATE, //velocidade                    SerialPort.DATABITS_8, //bits de transmição                    SerialPort.STOPBITS_1, //bits de parada                    SerialPort.PARITY_NONE);                        serialPort.addEventListener(this);   //vai escutar eventos da serial            serialPort.notifyOnDataAvailable(true);  //vai ser notificado quando estiver chegando dados                        status = true;                        /*try {                Thread.sleep(1000);                                            } catch (InterruptedException e) {                e.printStackTrace(); //imprime a pilha de excessão                status = false;            }*/                    } catch (Exception e) {            e.printStackTrace();        }                return status;    }        //envia os dados na serial    public void sendData(String data) {        try {            output = serialPort.getOutputStream();            output.write(data.getBytes());//envia os bytes da informação        } catch (Exception e) {            System.err.println(e.toString());            //Podemos exibir uma mensagem;        }    }        //fecha a comunicação serial    public synchronized void close() {        if(serialPort != null) {            serialPort.removeEventListener();            serialPort.close();        }    }            @[member=override]    public synchronized void serialEvent(SerialPortEvent spe) {        //método que lida com a chegada de dados pela serial ao computador                try {            switch(spe.getEventType()) {                case SerialPortEvent.DATA_AVAILABLE:                     if (input == null) {                        input = new BufferedReader( //leitor bufferizado                                new InputStreamReader(                                        serialPort.getInputStream())); //envia o fluxo da porta serial parta o inputStreamReader                                            }                    if(input.ready()) {                        protocolo.setLeituraComando(input.readLine());                        System.out.println("Chegou: " + protocolo.getLeituraComando());                    }                                        break;                                    default:                    break;                            }        } catch (Exception e) {            e.printStackTrace();        }    }    public SerialPort getSerialPort() {        return serialPort;    }    public void setSerialPort(SerialPort serialPort) {        this.serialPort = serialPort;    }    public Protocolo getProtocolo() {        return protocolo;    }    public void setProtocolo(Protocolo protocolo) {        this.protocolo = protocolo;    }    public static int getDATA_RATE() {        return DATA_RATE;    }    public static void setDATA_RATE(int DATA_RATE) {        SerialRxTx.DATA_RATE = DATA_RATE;    }    public String getSerialPortName() {        return serialPortName;    }    public void setSerialPortName(String serialPortName) {        this.serialPortName = serialPortName;    }       }
Link para o comentário
Compartilhar em outros sites

Eu estou usando o Windows 8.1. Verifiquei que o programa está enviando normalmente os dados para o arduino, como o esperado. Eu acredito que o problema do meu programa está no serialEvent pois é esta classe que é responsável por captar os dados que são enviados pelo arduino, ou ainda, pode ser a parte do eventListener que não está informando que os dados estão sendo enviados.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...