私はArduino Unoに接続されている簡単な指紋スキャナに取り組んでいます。 Arduinoが指紋スキャナのために処理しているデータをシリアルで読み取ることができるように、私の回路をusb経由でコンピュータに接続しました。私は、JavaFXを使用してプロジェクトのための簡単なUIを作成中です。これまでのところ、私はいくつかの段階を作りました。JavaFX Arduino Communication(JSSC) - 最初にステージを表示してからArduinoを読む
最初のものは、その上に1つのボタンがあるホームステージです。基本的には、このボタンをクリックするとシリアルポートが開き、enroll/verifyモード(「Enrollment」または「Verification」という文字列をシリアルに送信した後の物理的なボタン)の1つが聞こえます。登録を押すと、新しいステージが開き、既にArduinoが印刷物を登録する準備が整っているので、シリアルをもう一度読む必要はありません。プリントをスキャンした後、私はフォームに記入し、指紋スキャナによって作成された指紋IDを受け取り、フォームのフィールドの1つ(背後にある)とリンクする送信ボタンを押します。その後、ステージが終了し、私はシリアルを再読み込みし始めます。
ここが問題の始まりです。
私はどのウィンドウを開くかを探していますが、どの物理的なボタンが回路上に押されているかに応じて)最初にを確認してから、ウィンドウ上のものを変更しますか?
複雑なように見えるかもしれませんが、私は認識しています。そのため、コードの一部が以下のとおりです。
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複数可)を呼び出した後に2秒を待ってみましたが、何らかの理由では、印刷を読み確認してから、ウィンドウを開きます。私は反対にしようとしています - ウィンドウを開いて確認し、確認されたらウィンドウ上のいくつかの画像を変更します。これをどうやって行うのですか?
最後に一つ、
checkMode(SerialPort s)
は、回路上のボタン入力を読み取るために使用されるほとんどです。どのボタンが押されたかによって、checkMode(SerialPort s)は1(登録モード)または2(確認モード)を返します。