2017-02-21 4 views
1

Я пытаюсь прочитать UID RFID и отправить его Netbeans, но когда я пытаюсь отобразить String, он отображает только последний бит. , например, когда я сканировал RFID, UID - C945AA2A, но при отображении на текстовом поле он показывает только 2A или иногда только A. что я должен сделать, чтобы отобразить полный uid в текстовом поле? и я хочу, чтобы Arduino посылать данные один раз и не будет посылать что-нибудь, даже если новый RFID сканируетсяsetText() display and serial communication (jSSC)

здесь является Arduino Код:

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

#define RST_PIN   9   // Configurable, see typical pin layout above 
#define SS_PIN   10   // Configurable, see typical pin layout above 

MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance 

void setup() { 
    Serial.begin(9600);  // Initialize serial communications with the PC 
    while (!Serial);  // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) 
    SPI.begin();   // Init SPI bus 
    mfrc522.PCD_Init();  // Init MFRC522 

    //mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details 
    //Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks...")); 
} 

void loop() { 
    // Look for new cards 
    String code = ""; 
    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); 
    } 
    code.toUpperCase(); 
    Serial.println(code); 
    mfrc522.PICC_HaltA(); 
} 

и вот код Netbeans:

public void detectPort(){ 
    String ports = getPortNames(); 
    SerialPort sPort = new SerialPort(ports); 
    try{ 
     sPort.openPort(); 
     sPort.setParams(SerialPort.BAUDRATE_9600, 
       SerialPort.DATABITS_8, 
       SerialPort.STOPBITS_1, 
       SerialPort.PARITY_NONE); 
     sPort.setEventsMask(MASK_RXCHAR); 
     sPort.addEventListener((SerialPortEvent serialPortEvent) -> { 
      if(serialPortEvent.isRXCHAR()){ 
       try{ 
        String st = sPort.readString(); 
        jTextField1.setText(st); 
        jLabel2.setText(st); 
       }catch(SerialPortException ex){ 
        Logger.getLogger(SerialTest.class.getName()) 
         .log(Level.SEVERE, null, ex); 
       } 
      } 
     }); 

    }catch(Exception e){ 
     System.out.print(e); 
    } 
}  

public String getPortNames(){ 
    String defport = ""; 
    String[] ports = SerialPortList.getPortNames(); 
    for(String name: ports){ 
     for(int i = 0; i < ports.length; i++){ 
      jLabel1.setText(ports[i]); 
      defport = ports[i]; 
     } 
    }   
    return defport;     
} 

ответ

1

Я думаю, ваша проблема заключается в:

jTextField1.setText(st); 

вместо того, чтобы текст, вы можете добавить его в т он есть существующий текст.

jTextField1.setText(jTextField1.getText()+st); 
+0

это сработало, спасибо – Xue