我正在使用processing并且我正在使用串行端口从Arduino读取输入但可能会发生连接丢失,在这种情况下如何重新打开此连接?
答案 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。