RFID Daten (Name) über Liquid crystal display ausgeben lassen

Hallo Leute
melde mich wider mit einem Pronlem.

Habe einen RFID reader (RC-522) und mit einem fertigen programm hab ich einen Chip meinen Namen vergeben. Jetzt versuch ich gerade diesen Namen wider auszugeben und zwar über ein LCD. beim Code den ich bis jetzt habe wird der Name über den Monitor ausgegeben aber ich bekomm es nicht hin den Namen über den LCD ausgeben zu lassen.

mein Code:

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

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 4 line display



#define RST_PIN         4           // Configurable, see typical pin layout above
#define SS_PIN          2          // Configurable, see typical pin layout above

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

//*****************************************************************************************//


void setup() {
  Serial.begin(115200);                                           // Initialize serial communications with the PC
  SPI.begin();                                                  // Init SPI bus
  mfrc522.PCD_Init();                                              // Init MFRC522 card
  //Serial.println(F("Read personal data on a MIFARE PICC:"));    //shows in serial that it is ready to read
 lcd.init();                      // initialize the lcd 
  lcd.init();
 
  
}

//*****************************************************************************************//
void loop() {

  // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
  MFRC522::MIFARE_Key key;
  for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;

  //some variables we need
  byte block;
  byte len;
  MFRC522::StatusCode status;

  //-------------------------------------------

  // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

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

  //Serial.println(F("**Card Detected:**"));

  //-------------------------------------------

  //mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid)); //dump some details about the card

  //mfrc522.PICC_DumpToSerial(&(mfrc522.uid));      //uncomment this to see all blocks in hex

  //-------------------------------------------

  //Serial.print(F("Name: "));

  byte buffer1[18];

  block = 4;
  len = 18;

  //------------------------------------------- GET FIRST NAME
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
  if (status != MFRC522::STATUS_OK) {
    //Serial.print(F("Authentication failed: "));
    //Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  status = mfrc522.MIFARE_Read(block, buffer1, &len);
  if (status != MFRC522::STATUS_OK) {
    //Serial.print(F("Reading failed: "));
    //Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //PRINT FIRST NAME
  for (uint8_t i = 0; i < 16; i++)
  {
    if (buffer1[i] != 32)
    {
      
      Serial.write(buffer1[i]);
  
    }
  }
  
  Serial.print(" ");

  //---------------------------------------- GET LAST NAME

  byte buffer2[18];
  block = 1;

  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //line 834
  if (status != MFRC522::STATUS_OK) {
    //Serial.print(F("Authentication failed: "));
    //Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  status = mfrc522.MIFARE_Read(block, buffer2, &len);
  if (status != MFRC522::STATUS_OK) {
    //Serial.print(F("Reading failed: "));
    //Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //PRINT LAST NAME
  for (uint8_t i = 0; i < 16; i++) {
    Serial.write(buffer2[i] );
  }

  

  //----------------------------------------

  //Serial.println(F("\n**End Reading**\n"));

  delay(1000); //change value if you want to read cards faster

  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();
}

geht das überhaupt den namen so auszugeben?
gibt es da eine einfachere lösung?
hab noch nicht viel erfahrung mit dem programmieren :sweat_smile:

danke schon mal für die hilfe

Ersetze einfach mal für den Anfang Serial.write durch lcd.write. Das sollte bei ordentlichen LCD-Libs funktionieren. Dann Schau Dir noch die Positionierung in den Beispielen Deiner LCD-Lib an und das sollte es für den Anfang gewesen sein.

Gruß Tommy

Doppelt hält nicht besser :wink:

Am Beispiel First:

  //------------------------------------------- GET FIRST NAME
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
  if (status != MFRC522::STATUS_OK)
  {
    //Serial.print(F("Authentication failed: "));
    //Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  status = mfrc522.MIFARE_Read(block, buffer1, &len);
  if (status != MFRC522::STATUS_OK)
  {
    //Serial.print(F("Reading failed: "));
    //Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  //PRINT FIRST NAME
  lcd.clear();
  lcd.setCursor(0, 0);
  for (uint8_t i = 0; i < 16; i++)
  {
    if (buffer1[i] != 32)
    {
      Serial.write(buffer1[i]);
      if (buffer1[i] < 20)
        lcd.write(buffer1[i]);
    }
  }
  Serial.print(" ");
  //---------------------------------------- GET LAST NAME

wäre das mein Ansatz.

ersetzte ich Serial.write durch lcd.write bekomme ich nur ne 1 ausgegeben

danke Leute es funktioniert schon! :grin:

:+1:
Aber: Code aufräumen.
Wenn Du einen buffer hast und den nur einmal verwendest, musst Du für die nächste Ausgabe keinen weiteren buffer festlegen....
Da ist noch viel Sparpotenzial... :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.