需要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);
}
}
}
}
}