我编写了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中的安全问题吗?是否最好在一段时间后关闭并重新打开端口以阻止这种情况发生?