我编写了 Java 代码来读取使用 USB 从 Arduino 发送到 Mac 的传感器数据。我正在使用 RXTX 库版本 2.1.7。
代码是:
CommPortIdentifier portId = getPortId();
logger.info(PORT_NAME + " has ID " + portId);
try
{
serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT);
// set port parameters
serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
}
catch(Exception ex)
{
ex.printStackTrace();
logger.error(ex.toString());
}
然后我有一个对串行端口上的事件做出反应的方法:
public void serialEvent(SerialPortEvent e) {
String url = LOCALHOST;
if (e.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine=input.readLine();
logger.info("Read: " + inputLine);
String[] tokens = inputLine.split(",");
String tmp = tokens[0];
String lgt = tokens[1];
String vib = tokens[2];
String mot = tokens[3];
logger.info("Temperature: " + tmp);
logger.info("Light: " + lgt);
logger.info("Vibration: " + vib);
logger.info("Motion: " + mot);
logger.info("Sending update to " + url);
sendUpdate(url, tmp, lgt, vib, mot);
} catch (Exception ex) {
logger.error(ex.toString());
}
}
}
理想情况下,该程序无限期地运行,从串行端口抓取传感器观察结果。但是,我在晚上启动该程序,当我第二天早上返回时,我的 Mac 的蓝牙键盘和鼠标不再响应。绝对是这段代码导致了问题。这是 Mac OS 中的安全问题吗?是否最好在一段时间后关闭并重新打开端口以阻止这种情况发生?