5 votos

Problema de comunicación con el puerto serie (en JAVA)

He escrito un programa Java para leer mi Arduino salidas a través del puerto serie (utilizando la biblioteca RXTX). Hay un pequeño problema que estoy enfrentando.

Arduino escribe continuamente en serie. Pero cada vez, después de ejecutar el programa Java tengo que reiniciar el Arduino para que el programa vea los valores del puerto serie. De lo contrario, no leerá ningún valor.

Espero que esté claro. Necesito saber si hay una forma de arreglar esto. Cómo puedo hacer que mi programa lea los valores del puerto serie cuando se inicia sin hacer nada a los dispositivos externos.

Gracias.

EDITAR Este es el método que inicializará el puerto serie.

SerialPort serialPort;
private static final String PORT = "COM32";
private InputStream input;
private static final int TIME_OUT = 2000;
private static final int DATA_RATE = 9600;

public void initialize() {
        CommPortIdentifier portId = null;
        Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
        while (portEnum.hasMoreElements()) {
            CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
            if (currPortId.getName().equals(PORT)) {
                portId = currPortId;
                break;
            }
        }
        if (portId == null) {
            System.out.println("Could not find COM port.");
            return;
        }
        try {
            serialPort = (SerialPort) portId.open(this.getClass().getName(),
                    TIME_OUT);

            serialPort.setSerialPortParams(DATA_RATE,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            input = serialPort.getInputStream();
            serialPort.addEventListener(this);
            serialPort.notifyOnDataAvailable(true);
        } catch (Exception e) {
            System.err.println(e.toString());
        }
    }

3voto

Shadow_x99 Puntos 10421

Las señales de control de flujo en serie (DTR y/o RTS) deben ajustarse de acuerdo con la especificación de Arduino y con la especificación del adaptador USB-SERIAL que estés utilizando.

Mirando brevemente el esquema de tu placa, puedo ver que la señal RTS está desconectada, pero la señal DTR del chip FTDI está acoplada al pin RESET del ATMEGA (imagino que esto se hace para que el uploader de Arduino pueda resetear el micro y cargarle un nuevo firmware).

Esto significa que tienes que establecer la señal DTR (en tu código Java) para evitar reinicios no deseados.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X