我正在尝试创建一个与Arduino连接的Processing应用程序。
由于我希望自动建立两者之间的连接,这意味着我没有指定端口的名称,但我使用Serial.list()来获取名称端口可用,然后使用for循环我将检查哪一个正在打印正确的字符串。
问题在于,当我首先访问/dev/cu.*
时,所有/dev/tty.*
端口都忙,反之亦然。这很奇怪,我不希望这种情况发生。
答案 0 :(得分:0)
您应该能够使用一个(/dev/tty.*
)或另一个(/dev/cu.*
),但不能同时使用两者,因为它们可能以不同的方式指向同一资源。
我建议列出端口,检查端口前缀(再次说出/dev/tty.*
,但不是/dev/cu.*
),初始化串口,然后退出遍历列出的串口的循环端口:
import processing.serial.*;
Serial arduino;
final int BAUD_RATE = 9600;
void setup(){
String[] ports = Serial.list();
for(int i = 0 ; i < ports.length; i++){//go through each port
if(ports[i].contains("tty.usbmodem")){//find one that looks like an Arduino on OSX
try{
arduino = new Serial(this,ports[i],BAUD_RATE);//initialize the connection
i = ports.length;//exit the loop, break; should also work
println("Arduino connection succesfully initialized");
}catch(Exception e){
System.err.println("Error opening Serial port!\nPlease check USB connection and ensure the port is not already open in another application.");
e.printStackTrace();
}
}
}
if(arduino == null) System.err.println("Serial connection to Arduino failed!");
}