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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
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

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