需要一些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时,数据流就像预期的一样。
有人知道我做错了什么吗?(我是个编码新手)
每一次向正确方向的推进都将是非常感谢的!
下面是我代码的摘录:
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);
}
}
}
}
}发布于 2020-01-07 12:05:44
尝试创建字符串缓冲区的副本,以便在运行函数中传递给setSerialData,或者只是等待有足够的字节来读取srlEvent.getEventValue()>x来处理它。请看这篇文章https://arduino.stackexchange.com/questions/3755/how-to-use-readline-from-jssc/3764#3764
https://stackoverflow.com/questions/55158693
复制相似问题