我正在使用处理并且我正在使用串行端口从 Arduino 读取输入,但可能会发生连接断开,在这种情况下如何重新打开此连接?
问问题
3810 次
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 回答