0

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

4

0 回答 0