java - 处理时重新连接串口

标签 java connection serial-port arduino processing

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

最佳答案

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

关于java - 处理时重新连接串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12571498/

相关文章:

connection - 保持网页之间的 webrtc 流/连接

c++ - 使用 Qt 在 C++ 中进行线程串口通信

serial-port - 强大且易于实现的串行总线(汽车应用)

java - 为什么我在此素数检查中收到 ArrayIndexOutOfBoundsException?

java - 连接oracle数据库

Python客户端套接字正在连接,即使服务器不接受新连接并且积压大小为0

c++ - 是否可以通过编程方式更改 USB<-> 串行转换器的 'BM' 延迟选项?

java - Java中char数组的和

java - 点击其他地方时 JMenu 不会关闭

java - 通过 JNI 将我的 Java API 扩展到 C++ : How to wrap a method returning a String?