首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javafx与JSSC串行通信

Javafx与JSSC串行通信
EN

Stack Overflow用户
提问于 2019-03-14 09:13:03
回答 1查看 329关注 0票数 0

需要一些Javafx + JSSC方面的帮助。

我正在尝试建立一个Raspberry Pi 3B+和eval之间的串行通信。董事会(Atmel SAMC21 Xplained )

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

Raspberry Pi 3B+与Javafx程序一起显示传入数据的3B+。带数据板

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

使用Javafx (Eclipse : 2018-09 (4.9.0))和JSSC (Version2.7.0),我编写了一个例程,用于从eval中获取(或应该继续获取)数据。板和显示在UI屏幕上,连接到Raspberry Pi。( Javafx程序运行在Raspberry Pi上。)

这些是我面临的问题:

1)在(Javafx)程序启动时,数据只发送一次给Raspberry Pi。显示的数据没有更新,尽管。董事会一直在发送数据。

2)未清除缓冲区中的新数据。因此,通常只有一部分数据是静态显示的(这意味着输入的数据没有显示)。

尝试了几件事[建议]来解决这个问题,但没有成功。

当我在Raspberry Pi终端上发射minicom时,数据流就像预期的一样。

有人知道我做错了什么吗?(我是个编码新手)

每一次向正确方向的推进都将是非常感谢的!

下面是我代码的摘录:

代码语言:javascript
复制
         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);
                    }
            }           
        }       
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-01-07 12:05:44

尝试创建字符串缓冲区的副本,以便在运行函数中传递给setSerialData,或者只是等待有足够的字节来读取srlEvent.getEventValue()>x来处理它。请看这篇文章https://arduino.stackexchange.com/questions/3755/how-to-use-readline-from-jssc/3764#3764

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55158693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档