Javafx和JSSC串行通信

时间:2019-03-14 09:13:04

标签: javafx jssc

需要Javafx + JSSC的帮助。

我正在尝试在Raspberry Pi 3B +与 一次评估。板(Atmel SAMC21 Xplained Pro)。

这是我的硬件设置的符号表示:

具有Javafx程序的Raspberry Pi 3B + 显示传入数据 [USB] <----------> [USB] 评估。数据板

(我的Raspberry Pi在2018-11-13-raspbian-stretch版本下运行)

使用Javafx(Eclipse版本:2018-09(4.9.0))和JSSC(版本2.7.0) 我编写了一个例程来从中获取(或应该连续获取)数据 评估。板并在连接到Raspberry Pi的UI屏幕上显示。 (Javafx UI程序在Raspberry Pi上运行。)

这些是我面临的问题:

1)在(Javafx)程序启动时,将数据发送一次,但仅发送到Raspberry Pi。     尽管已评估,但显示的数据不会更新。板     一直在发送数据。

2)不清除缓冲区中的新数据。因此通常只有一部分数据     静态显示(表示不显示传入数据)。

尝试了一些事情/建议来解决问题,但没有成功。

当我在Raspberry Pi终端上启动minicom时,数据流与 预期的。

有人知道我在做什么错吗? (我是编码方面的新秀)。

每一次朝正确的方向前进都将不胜感激!

这是我的代码的摘录:

         public class RxTxSerialData
        {
          private static SerialPort serialPort;
          private StringProperty serialData = new SimpleStringProperty();
          Label dataFromController = new Label();

   // setter and getter for serial data
          public final String getSerialData()
         {
            return serialData.get();
         }

         public final void setSerialData(String srlData)
         {
            serialData.set(srlData);
         }

         public final StringProperty serialDataProperty()
         {
            return serialData;
         }

//*** method for receiving data from µ-controller
         public void receiveSerialDataFromController()
    {
        SerialPort serialPort = new SerialPort("/dev/ttyACM0");

        String stringFromController = dataFromController.getText();

        try 
        {
            if (serialPort != null && serialPort.isOpened())
            {
                serialPort.purgePort(4); //tx_clear
                serialPort.purgePort(8); //rx_clear
                serialPort.closePort();
            }
            serialPort.openPort();
            serialPort.purgePort(4); //tx_clear
            serialPort.purgePort(8); //rx_clear

            try {
                Thread.sleep(3000);
            }catch(InterruptedException ie) 
            {
                Logger.getLogger(RxTxSerialData.class.getName()).log(Level.SEVERE, null, ie);
            }

            serialPort.setParams
            (
                SerialPort.BAUDRATE_115200,
                SerialPort.DATABITS_8, 
                SerialPort.STOPBITS_1, 
                SerialPort.PARITY_NONE
            );          

            serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN | SerialPort.FLOWCONTROL_RTSCTS_OUT);            

            PortReader portReader = new PortReader(serialPort);                         
            serialPort.addEventListener(portReader, SerialPort.MASK_RXCHAR);

            serialPort.writeBytes(stringFromController.getBytes());

        }catch(SerialPortException se) 
        {
            Logger.getLogger(RxTxSerialData.class.getName()).log(Level.SEVERE, null, se);
        }
    }

private class PortReader implements SerialPortEventListener
    {
        SerialPort serialPort;

        public PortReader(SerialPort serialPort)
        {
            this.serialPort = serialPort;
        }

        @Override
        public void serialEvent(SerialPortEvent srlEvent) 
        {
            if(srlEvent.isRXCHAR() && srlEvent.getEventValue() > 0) 
            {
                try 
                {
                    String buffer = serialPort.readString(srlEvent.getEventValue());
                    setSerialData(buffer);

                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            setSerialData(buffer);
                        }
                    });
                }catch (SerialPortException ex) 
                    { 
                        System.out.println("Error" + ex);
                    }
            }           
        }       
    }
}

0 个答案:

没有答案