1

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

4

2 回答 2

4

您可以捕获 Serial.java 抛出的 RuntimeExceptions,这通常表明串行端口不再可用。然后,在那个 catch 块中,您可以开始轮询串行端口;一旦它允许您重新实例化您的 Serial 实例,该端口将再次可用(例如,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,再试一次,根据需要重复。)应该没那么重要,但不知道……由于我对某些东西知之甚少,在串行端口上用力敲打可能会产生意想不到的副作用。

于 2012-09-25T03:54:23.517 回答
3

在 Arduino IDE 中,您必须关闭串口监视器,然后返回 [Tools] -> [Serial Port] 重新选择您的串口。

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

您应该按下板上的重置按钮来重新启动程序,而不是移除 USB 电缆。

另外,请记住,许多 Arduino 具有串行通信“功能”的自动重置。我在这里发布了解决方法的说明。

在此处输入图像描述

于 2012-09-24T21:25:18.463 回答