在处理时重新连接串行端口

时间:2012-09-24 19:25:03

标签: java connection serial-port arduino processing

我正在使用processing并且我正在使用串行端口从Arduino读取输入但可能会发生连接丢失,在这种情况下如何重新打开此连接?

2 个答案:

答案 0 :(得分:4)

您可以捕获Serial.java抛出的RuntimeExceptions,这通常表示串口不再可用。然后,在该catch块中,您可以开始轮询串行端口;一旦它允许你重新实现你的串行实例,端口再次可用(例如USB线已经插回),你又回到了游戏中。

Serial serial;
boolean serialInited;

void setup () {
    initSerial();
}

void draw () {
    if (serialInited) {
        // serial is up and running
        try {
            byte b = serial.read();
            // fun with serial here...
        } catch (RuntimeException e) {
            // serial port closed :(
            serialInited = false;
        }
    } else {
        // serial port is not available. bang on it until it is.
        initSerial();
    }
}

void initSerial () {
    try {
        serial = new Serial(this, Serial.list()[0], BAUD_RATE);
        serialInited = true;
    } catch (RuntimeException e) {
        if (e.getMessage().contains("<init>")) {
            System.out.println("port in use, trying again later...");
            serialInited = false;
        }
    }
}

您可能会想要使用限制重新连接尝试频率的计数器,而不是尝试重新连接每个帧。 (例如计数到10,再试一次,根据需要重复。)不应该那么重要,但是不知道......在串口上猛烈敲打可能会产生意想不到的副作用,因为我对此知之甚少。

答案 1 :(得分:3)

在Arduino IDE中,您必须关闭串口监视器,然后返回[工具] - &gt; [Serial Port]重新选择串口。

这是因为当您断开电缆连接时,您将删除之前使用的串行设备。 Linux比Windows更好地处理这个问题,但无论哪种方式,它都会对串行监视器造成严重破坏。

您应该按下主板上的重置按钮重新启动程序,而不是拔下USB线。

另外,请记住,许多Arduinos在串行通信“功能”上都有自动复位功能。我发布了一个解决方法here

enter image description here