【问题标题】:Reconnect Serial Port on Processing在处理中重新连接串行端口
【发布时间】:2012-09-16 07:04:08
【问题描述】:

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

【问题讨论】:

  • 你当初建立连接的方法有什么问题?
  • 如果我拔掉usb数据线,然后重新连接,如果不关闭并重新打开软件,我将无法重新连接串口。
  • 请在您的问题中添加导致连接断开的原因(包括 USB 拔出和任何其他情况,如果适用)

标签: java connection serial-port arduino processing


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,它可以工作,但我需要没有人工交互的代码。 :)
【解决方案2】:

您可以捕获 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,再试一次,根据需要重复。)应该没那么重要,但不知道...由于我不太了解的事情,在串行端口上用力敲打可能会产生意想不到的副作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多