Java 和 Arduino 之间的串行通信

Serial Comunnication between Java and Arduino

我正在编写一个代码来使用 arduino 的串行端口发送和接收数据,为此我正在使用 jserialcomm 库。对于发送和接收数据,我使用库的 DataListener 来检测是否已发送或接收到一堆字节,问题是 DataListener 使用一种名为 getListneningEvents 的方法来列出 DataListener 将要发生的事件能够使用,但你只能 return 其中一个,因为正在覆盖一个抽象方法,该方法 return 只有一个整数,文档说你可以 return 一个或多个事件,但我真的不知道该怎么做,如果你能帮忙,请。

public class MessageListener implements SerialPortMessageListener{
@Override
public int getListeningEvents() { 
    return SerialPort.LISTENING_EVENT_DATA_WRITTEN;
    // return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
    // I want to return both methods
}


@Override
public byte[] getMessageDelimiter(){ 
    return new byte[] {
        (byte)0x0A
    }; 
}

@Override
public boolean delimiterIndicatesEndOfMessage(){ 
    return true; 
}

@Override
public void serialEvent(SerialPortEvent event){
    switch (event.getEventType()) {
        //Evento para datos enviados
        case SerialPort.LISTENING_EVENT_DATA_WRITTEN:
            System.out.println("All bytes were successfully transmitted!");
            break;
        
        //Evento para datos recibidos
        case SerialPort.LISTENING_EVENT_DATA_RECEIVED:
            byte[] delimitedMessage = event.getReceivedData();
            String mensaje = new String(delimitedMessage, StandardCharsets.UTF_8);
            mensaje = mensaje.replace("\n", "");
            System.out.println("Received the following delimited message: " + mensaje);
            break;
    }
    
}

}

Documentation of that DataListener

您可以通过将这些事件组合在一起来监听多个事件:

return SerialPort.LISTENING_EVENT_DATA_WRITTEN | SerialPort.LISTENING_EVENT_DATA_RECEIVED;

这是如何工作的:

假设 LISTENING_EVENT_DATA_WRITTEN 的值为 1LISTENING_EVENT_DATA_RECEIVED 的值为 2,二进制:

1 = 01
2 = 10

如果这两个数字现在使用逻辑或运算符 | 进行“或”运算,结果为:

01 | 10 = 11

图书馆现在检查是否

11 & LISTENING_EVENT_DATA_WRITTEN == LISTENING_EVENT_DATA_WRITTEN

如果是这种情况,这将“传递”给您的 class