如何解决Java串行通信-> EventListener问题
我正在尝试使用Java串行通信从串行设备读取测量值。任务是将9的 ASCII 代码(十进制为57)发送到设备,它将返回测量的当前值。首先,我想确保正确发送了一些值。到目前为止,该连接有效,当我更改getListeningEvents()
方法以检查SerialPort.LISTENING_EVENT_DATA_WRITTEN
时,它仍然有效,并显示了我的短语“可读”,但是在这种情况下,这仅表明已传输数据。 / p>
因此,该号码已正确发送,但是在打印“已写”后我无法得到答案,并且程序卡住了。
在许多示例中,我看到了notifyOnDataAvailable()
类的方法SerialPort
,但是我在文档中找不到它了,而且我不确定是否必须使用任何其他方法来初始化侦听器。所以我的问题是,我的程序(尤其是EventListener
)有什么问题,它无法接收或识别返回的值?
这是我的代码:
public class ConnectionNew implements SerialPortDataListener {
private SerialPort serialPort = null;
private java.io.OutputStream output = null;
private InputStream input = null;
private SerialPort [] ports = null;
public static void main(String[] args) {
ConnectionNew connect = new ConnectionNew();
connect.connectPort();
connect.initIOStream();
connect.initListener();
connect.writeData();
}
public void connectPort() {
ports = SerialPort.getCommPorts();
System.out.println("Select a port: ");
int i = 1;
for (SerialPort port : ports) {
System.out.println(i++ + ": " + port.getSystemPortName());
}
Scanner s = new Scanner(system.in);
int chosenPort = s.nextInt();
serialPort = ports[chosenPort - 1];
if (serialPort.openPort()) {
System.out.println("Port opened successfully");
} else {
System.out.println("Unable to open the port");
return;
}
}
public boolean initIOStream(){
input = serialPort.getInputStream();
output = serialPort.getoutputStream();
System.out.println("Streams Connected");
return true;
}
public void initListener() {
serialPort.addDataListener(this);
}
public void writeData(){
try {
output.write(57);
output.flush();
System.out.println("Written");
} catch (IOException e) {
e.printstacktrace();
}
}
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
}
@Override
public void serialEvent(SerialPortEvent arg0) {
System.out.println("Reading possible");
}
}
我很高兴收到任何提示,谢谢!!
解决方法
您需要从事件中获取数据:
public void serialEvent(SerialPortEvent e) {
byte[] data = e.getReceivedData();
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。