我正在制作一个使用登录表单并使用串行端口访问 Arduino 的项目。我必须在应用程序启动时向 Arduino 发送一个字符串,并等待设备的响应以知道它已准备好运行,然后再检查登录用户名和密码是否正确。我创建了两个类,一个称为 Login 用于检查用户名和密码,另一个称为 serial 包含 jssc 实现。
我正在使用库 java simple serial connector 和找到的示例HERE。
public class PortReader implements SerialPortEventListener {
@Override
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR() && event.getEventValue() > 0) {
try {
synchronized(this){
String receivedData = serialPort.readString(event.getEventValue());
System.out.println("Received response from port: " + receivedData);
serialPort.closePort();
}
}
catch (SerialPortException ex) {
System.out.println("Error in receiving response from port: " + ex);
}
}
}
}
此函数在 Login 类中创建串行对象。
try {
reader.connect(comReader);
writer.connect(comWriter);
//Message to Arduino, wait response.
writer.serialWrite("1");
synchronized(writer){
try{
writer.wait();
}
catch(Exception e){
e.printStackTrace();
}
}
} catch (Exception ex) {
lblMensaje.setText("Fallo de conexion serial.");
System.out.println(ex);
}
我成功地将数据发送到 Arduino 并接收到响应,但我不知道如何将该值传递给 Login 类。我得到的只是一个空值或什么都没有。我尝试过使用等待方法,尝试在串行内部传递一个新的 Login 实例,并尝试通过 getter 变量将该方法公开,但到目前为止没有任何效果。
将 SerialEvent 变量传递给调用类的正确方法是什么?该类如何知道串行事件已完成以继续比较登录表单?