Java与Arduino的串行通信



我正在编写使用arduino串行端口发送和接收数据的代码,为此我使用jserialcomm库。发送和接收数据,我使用的图书馆DataListener检测是否已经发送或接收一串字节,问题在于DataListener使用一个方法称为getListneningEvents DataListener的事件列表可以使用,但你只能返回其中一个因为是覆盖一个抽象方法只返回一个整数,表示文档,您可以返回一个或多个事件,但我确实不知道怎么做,如果你能帮忙,请。

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;
}

}

}

DataListener的文档

您可以通过将这些事件放在一起来侦听多个事件:

return SerialPort.LISTENING_EVENT_DATA_WRITTEN | SerialPort.LISTENING_EVENT_DATA_RECEIVED;

这是如何工作的:

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

1 = 1
2 = 10

如果现在使用逻辑或运算符|将这两个数字"或"在一起,结果是:

01 | 10 = 11

库现在检查是否

11 & LISTENING_EVENT_DATA_WRITTEN == LISTENING_EVENT_DATA_WRITTEN

如果是这种情况,则"传递";到你的类

最新更新