2017-07-17 3 views
0

私は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(確認モード)を返します。

答えて

0

誰かがどこに質問したのですか?hereウィンドウがロードされた後にコードを実行する方法。 WindowEventを使用することは、コードを分割してreadVerify()がWindowEventリスナーメソッド内にあるようにするソリューションです。

関連する問題