我遇到了Processing3的问题,当我尝试连接到某个COM端口时,应用程序崩溃,出现Port Busy错误。
以下是代码段:
boolean found = false;
text(Arrays.toString(Serial.list()), 20, 500);
println("Still checking...");
for (String port : Serial.list()) {
myPort = new Serial(this, port);
myPort.clear();
myPort.write("init\n");
if (myPort.readStringUntil(lf) == "connected") {
found = true;
break;
}
}
if (!found) {
myPort = emptyPort;
text("Waiting for device...", 20, 40);
}
这是draw()循环的一部分,在此示例中,错误在第5行引发。在该特定端口可用之前,其他所有端口都运行良好。
这是来自连接的arduino的setup()代码:
Serial.begin(256000);
while (!Serial.available()) {}
while (true) {
String recv = Serial.readStringUntil('\n');
if (recv == "init") {
Serial.println("connected");
break;
} else {
while (!Serial.available()) {}
}
}
Serial.println("600,400");
Arduino IDE中的串行监视器测试不会产生此类错误。
答案 0 :(得分:0)
这似乎不对:
for (String port : Serial.list()) {
myPort = new Serial(this, port);
此处您正在连接每个串口。你应该只连接到一个,对吗?
另外,你说你是从draw()
函数做的吗?这似乎也错了。您不希望每秒连接端口60次。您希望从setup()
函数连接到一次,然后将该连接用于该程序的其余部分。
如果我是你,我会回过头看一些代码示例。
// Example by Tom Igoe
import processing.serial.*;
// The serial port:
Serial myPort;
// List all the available serial ports:
printArray(Serial.list());
// Open the port you are using at the rate you want:
myPort = new Serial(this, Serial.list()[0], 9600);
// Send a capital A out the serial port:
myPort.write(65);
此示例只连接到它找到的第一个COM端口,然后发送一个值。请注意,此代码是“一次完成”并且不会重复,类似于将此全部放在setup()
函数中时会发生的情况。
在尝试更复杂的事情之前,先得到像这样简单的东西。如果您遇到问题,请发布MCVE而不是一堆断开连接的代码段。祝你好运。
答案 1 :(得分:0)
您应该通过执行myPort.stop()来关闭myPort并释放COM端口以重复连接,而不是使用emptyPort替换myPort。