es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java jSerialPort con Arduino: Las salidas no se imprimen correctamente.

Cuando espero que los resultados sean Hello.

Sospecho que esto tiene que ver con interferencia de threads, así que cambié ComPortTimouts a SerialPort.TIMEOUTREADBLOCKING, sin embargo, no obtengo ningún resultado al hacer esto.

Aquí está mi código Java:

import java.util.Scanner;

import com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;

public class Arduino {
private static final SerialPort port = SerialPort.getCommPort(“/dev/cu.usbmodem1101”);
public static void main(String[] args) {

port.setComPortTimeouts(SerialPort.TIMEOUT_READ_BLOCKING, 0, 0);

if (port.openPort()) {
    System.out.println("Puerto abierto");
} else {
    System.out.println("Error al abrir el puerto: puede estar en uso o no existir");
}

port.addDataListener(new SerialPortDataListener() {
    @Override
    public int getListeningEvents() { 
        return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; 
    }

    @Override
    public void serialEvent(SerialPortEvent event) {
        if (event.getEventType() == SerialPort.LISTENING_EVENT_DATA_AVAILABLE) {
            try (Scanner scanner = new Scanner(port.getInputStream())) {
                while (scanner.hasNextLine()) {
                    System.out.println(scanner.nextLine());
                }
            }

        } 
    }
 });

port.addDataListener(new SerialPortDataListener() {

    @Override
    public int getListeningEvents() {
        return SerialPort.LISTENING_EVENT_DATA_WRITTEN;
    }

    @Override
    public void serialEvent(SerialPortEvent event) {
        if(event.getEventType() == SerialPort.LISTENING_EVENT_DATA_WRITTEN) {
            System.out.println("Datos escritos correctamente");
        }

    }

});

}
}

Y aquí está mi código Arduino:

void setup() {
Serial.begin(9600);

}

void loop() {
while (Serial.available() < 0) {
return;
}

Serial.write("Hello");
delay(1000);

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la función Serial.available() de su código de Arduino. Esta función devuelve el número de bytes disponibles para la lectura del puerto serie, y si es menor que 0, el bucle no se ejecutará. Intente cambiar la condición a Serial.available() > 0 para asegurarse de que se ejecute el bucle.

Comments are closed.