RXTX Java + Arduino - PullRequest
       6

RXTX Java + Arduino

0 голосов
/ 27 апреля 2019

У меня есть 2 датчика (A и B), подключенных к Arduino Nano, затем в моем приложении у меня есть две кнопки, одна для начала чтения, а другая для остановки чтения.Когда я нажимаю старт, я посылаю arduino сообщение вроде {start: [a, b]}

Когда я нажимаю стоп, я отправляю {stop: [a, b]}

У меня есть3 возможности прямо здесь

  1. Нажать кнопку «Пуск», а затем «Стоп», без датчиков, отправляющих мне какие-либо данные (это прекрасно работает)
  2. Чтобы нажать «Пуск», запишите данные с каждого датчика (датчиковпосылает по одной строке каждый) это тоже отлично работает
  3. И несчастный случай, то есть когда я нажимаю старт, использую ТОЛЬКО один датчик, а затем пытаюсь нажать стоп в середине.Дело в том, что когда я делаю это, мое приложение зависает в этот момент.Я покажу вам кусок кода и объясню вам, что передает input.close(), и если я его удаляю, то он зависает на serialPort.removeEventListener();, поэтому я не могу найти решение самостоятельно.

edit: добавив больше информации об этой проблеме, дело в том, что

                       serialPort.removeEventListener();
                        serialPort.close();

ничего не делают.

private SerialPort serialPort;
private BufferedReader input;
private OutputStream output; 

        public synchronized void close() {
        try {
            if (serialPort != null) {
                input.close();
                output.flush();
                output.close();

                new Thread() {
                    @Override
                    public void run() {
                        serialPort.removeEventListener();
                        serialPort.close();
                    }
                }.start();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }


        public void serialEvent(SerialPortEvent oEvent) {
        if(oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE){
            while(comparar(_sensores,_valorCorte)){
                String jsonRecibido;
                try {
                    jsonRecibido = input.readLine();
                    System.out.println("Se recibio: " + jsonRecibido);
                    ObjectMapper mapper = new ObjectMapper();
                    Medicion medicion = mapper.readValue(jsonRecibido,
                            Medicion.class);
                    mediciones.add(medicion);
                    int canal = 0;
                    canal = medicion.getCanal();
                    _sensores[canal-1] ++;
                } catch (IOException e) {
                    System.out.println("Fallo al leer el buffer");
                    System.err.println(e.toString());
                }
            }
        }
    }   

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...