2017-03-02 19 views
0

Netbeansプロジェクトがあります。ボタンが押されたとき、それは、これを実行することを:ユーザがそれを複数回スキャンするとき最初のRFIDのUIDテキストファイルのスキャン済み表示(jSSC Arduinoとjava(Netbeans JFrame))

ボタンが押された
if(!jTextField1.getText().isEmpty()){ 
     if(serialPort != null){ 
      try { 
       serialPort.removeEventListener(); 

       if(serialPort.isOpened()){ 
        serialPort.closePort(); 
       } 

      } catch (SerialPortException ex) { 
       Logger.getLogger(test.class.getName()) 
         .log(Level.SEVERE, null, ex); 
      } 
     } 
    } 
jTextField1.setText(null); 
portInitialize(serialPort); 
PortSerialReader(serialPort); 
jButton1.setEnabled(false); 

は、ユーザーが現在RFIDをスキャンすることができ、問題がある、すべてのUIDも表示されますテキストフィールドに表示されます。 は、例えば、スキャンユーザー:F9D6A12Aは、それが表示されるが、ユーザが別のRFIDをスキャンするとき、テキストフィールドの表示は、このように見えます。F9D6A12AのF9D6A12A。私は最初にスキャンされたRFIDのUIDを表示したいだけです。コードで何を変更する必要がありますか?ここで

public void PortSerialReader(SerialPort sPort){ 
    try{ 
     sPort.setEventsMask(MASK_RXCHAR); 
     sPort.addEventListener((SerialPortEvent serialPortEvent) -> { 
      if(serialPortEvent.isRXCHAR()){ 
       try{ 
        String st = sPort.readString(serialPortEvent.getEventValue()); 
        System.out.println(st); 
        jTextField1.setText(jTextField1.getText() + st); 
        jButton1.setEnabled(true); 
       }catch(SerialPortException e){ 
        Logger.getLogger(test.class.getName()) 
          .log(Level.SEVERE, null, e); 
       } 
      } 
     }); 
    }catch(SerialPortException ex){ 
     Logger.getLogger(test.class.getName()) 
       .log(Level.SEVERE, null, ex); 
    } 
} 

はArduinoのコードです:

#include <SPI.h> 
#include <MFRC522.h> 

#define SS_PIN 10 
#define RST_PIN 9 
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. 

void setup() { 
    Serial.begin(9600); // Initialize serial communications with the PC 
    SPI.begin();   // Init SPI bus 
    mfrc522.PCD_Init(); // Init MFRC522 card  
} 

void loop() { 
    String code = ""; 
    // Look for new cards 
    if (! mfrc522.PICC_IsNewCardPresent()) { 
     return; 
    } 

    // Select one of the cards 
    if (! mfrc522.PICC_ReadCardSerial()) { 
     return; 
    } 

    for (byte i = 0; i < mfrc522.uid.size; i++) { 
     code += String(mfrc522.uid.uidByte[i] < 0x10 ? "0" :""); 
     code += String(mfrc522.uid.uidByte[i], HEX); 
    } 
    Serial.println(code); 
    mfrc522.PICC_HaltA(); 
} 
+0

をあなたを助けるでしょう(これは)' ... – MadProgrammer

+0

は、私はすでにそれを試してみました、はい、それは表示さ最初のRFIDのみがスキャンされたが不完全であり、代わりに表示されない文字が次の利用可能なスキャンで表示された。 – Xue

+0

rfidの読み込みが完了したら、どのように知っていますか? – MadProgrammer

答えて

0

は最終的に間違いを発見しました。あなたのArduinoで

変更Serial.println(code);Serial.print(code);

、その後に、Javaソースで、あなたはString st = sPort.readString(8)(または文字列コードの合計数に

String st = sPort.readString(serialPortEvent.getEventValue());

を変更することにより、バイト数を設定する必要がありますarduinoから)

最後に、jTextField1.setText(st);

希望にjTextField1.setText(jTextField1.getText() + st);

を変更、これは `sPort.removeEventListenerを追加しようと、あなたのイベントリスナーの中に

関連する問題