Последовательная связь между 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

Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете прослушать несколько событий, объединив их вместе:

return SerialPort.LISTENING_EVENT_DATA_WRITTEN | SerialPort.LISTENING_EVENT_DATA_RECEIVED;

Как это работает:

Предположим, что LISTENING_EVENT_DATA_WRITTEN имеет значение 1, а LISTENING_EVENT_DATA_RECEIVED имеет значение 2 в двоичном виде:

1 = 01
2 = 10

Если теперь эти два числа объединить с помощью логического оператора ИЛИ |, результат будет следующим:

01 | 10 = 11

Теперь библиотека проверяет,

11 & LISTENING_EVENT_DATA_WRITTEN == LISTENING_EVENT_DATA_WRITTEN

если это так, это "передается" вашему классу

О боже, не могу поверить, что я этого не знал, спасибо, чувак!

Miguel Freytes 22.04.2022 20:21

Другие вопросы по теме