Problema en la comunicación del puerto serie (en JAVA)

5

He escrito un programa Java para leer las salidas de mi Arduino a través del puerto serie (utilizando la biblioteca RXTX). Hay un pequeño problema al que me 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 manera de arreglar esto. ¿Cómo puedo hacer que mi programa lea los valores de los puertos 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());
        }
    }
    
pregunta Anubis

1 respuesta

3

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

Mirando brevemente el esquema de su tablero, puedo ver que el RTS la señal se desconecta, pero la señal DTR del chip FTDI se acopla con el pin RESET de ATMEGA (me imagino que esto se hace para permitir que el cargador Arduino reinicie el micro y cargue un nuevo firmware).

Esto significa que debe configurar la señal DTR (en su código Java) para evitar restablecimientos no deseados.

    
respondido por el Axeman

Lea otras preguntas en las etiquetas