我正在研究一個連接到我的Arduino Uno的簡單指紋掃描器。我已經通過USB將我的電路連接到了我的電腦,這樣我就可以連續讀取Arduino正在爲指紋掃描器處理的數據。我正在爲使用JavaFX的項目製作一個簡單的UI。到目前爲止,我已經做了幾個階段。JavaFX Arduino通信(JSSC) - 首先展示舞臺,然後閱讀Arduino
首先是家庭舞臺上有一個按鈕。基本上,單擊此按鈕將打開串口,並偵聽2個事件中的1個,即註冊/驗證模式(電路上的物理按鈕,在將串行「註冊」或「驗證」字符串發送到串行之後)。在註冊後,一個新的階段打開了,由於Arduino已經準備好登記印刷品,所以我不必再次閱讀該系列。掃描完打印後,我填寫一張表格,然後點擊一個提交按鈕,該按鈕將指紋識別器創建的指紋ID與表格中的一個字段(幕後)鏈接起來。然後舞臺關閉,我開始重新閱讀這個序列。
這是問題開始的地方。
我找哪個窗口打開,但我怎麼能打開的窗口(取決於其壓在電路物理按鈕)第一,然後重新讀取串口用戶是否被驗證,然後改變窗戶上的東西?
它似乎很複雜,我知道,這就是爲什麼一些代碼在下面。
submitForm.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent e)
{
if(firstNameTextField.getText().length()>0 &&
lastNameTextField.getText().length()>0 &&
gpnTextField.getText().length() == 8)
{
enrollStage.hide();
try {
//System.out.println("winfwnif ");
if(readEnroll(sp)==true)
{
id++;
}
Employee employee = new Employee(Long.parseLong(gpnTextField.getText()), id);
pw = new PrintWriter(file);
pw.println(employee.getFP() + "," + employee.getGPN());
pw.close();
} catch (FileNotFoundException | SerialPortException | InterruptedException e2) {
e2.printStackTrace();
}
firstNameTextField.setText("");
lastNameTextField.setText("");
gpnTextField.setText("");
enrollStage.hide();
home.show();
try
{
home.close();
int mod = checkMode(sp);
if(mod == 1)
{
enrollStage.show();
}
else if(mod == 2)
{
boolean f = false;
//Thread.sleep(2000);
synchronized(verificationStage)
{
verificationStage.show();
Thread.sleep(2000);
f = readVerify(sp);
}
if(f)
{
userImageIV.setImage(new Image("/images/temp.png", 250, 400, true, false));
thumbIV.setImage(new Image("/images/greenThumb.png", 150, 300, true, false));
}
}
}
catch(SerialPortException | InterruptedException err)
{
}
}
}
});
這是我用來從Arduino讀取驗證輸出的函數。
public boolean readVerify(SerialPort s) throws SerialPortException, InterruptedException
{
while (true)
{
if (sp.getInputBufferBytesCount() > 0)
{ //check size of buffer
String x = s.readString();
System.out.println(x);
if(x.contains("Verified"))
{
return true;
}
}
Thread.sleep(100);
}
}
我試圖打開窗戶,然後調用readVerify(的SerialPort S)後等待2秒,但由於某些原因,它讀取打印,驗證,然後打開的窗口。我一直在嘗試相反的方法 - 打開窗戶,驗證,然後在窗口上更改一些圖像(如果驗證)。我如何去做這件事?
最後一件事,
checkMode(SerialPort s)
是相當多的被用於在電路讀取按鈕輸入。根據按下的按鈕,checkMode(SerialPort s)返回1(登記模式)或2(驗證模式)。