Andere Pinbelegung von RFID-Sensor (MFRC-522) Arduino Mega

Hallo,
ich stehe gerade vor einem kleinen Problem...
Ich möchte gerne einen RFID-Sensor in Verbindung mit einem tft-Display und einem Arduino Mega verwenden.
Da durch das Display aber nun die vordefinierten Pins für den RFID-Sensor belget sind (zumindest Pin 5),
bin ich etwas ratlos, wie ich nun weiter vorgehen soll.
Gibt es eine Lösung das ich den RFID-Sensor so anschließen kann, dass ich gleichzeitig das tft-Display verwenden kann (Dieses belegt momentan D0-D13, A0-A5)

Tft-Display: https://www.amazon.de/Elegoo-Touchscreen-Technische-Arduino-Mega2560/dp/B01EUVJYME

Grüße

Finn

Hallo Finn,
die MFRC522-Library hat einen Konstruktor für das "RFID"-Objekt, dem Du mitgeben kannst, an welchem Pin sich ChipSelect und PowerDown befinden:

MFRC522(byte chipSelectPin, byte resetPowerDownPin);

Sieht dann in Verwendung z.B. so aus (bei mir heißt das Objekt "nfc"):

#define RST_PIN         3
#define SS_PIN          10

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

Du hast also die freie Auswahl :slight_smile:

Gruß Walter

Da wir nicht alle Schaltungen im Kopf haben können, wäre es doch gut, wenn du deine Schaltung posten könntest.
Oder wenigstens hier mitteilen, welcher Pin vom RFID den Pin D5 belegt.
Evtl. ist das ja der CS-Pin, dann kannst du den auf einen anderen freien digitalen Pin legen und im Sketch anpassen.

HotSystems:
Oder wenigstens hier mitteilen, welcher Pin vom RFID den Pin D5 belegt.
Evtl. ist das ja der CS-Pin, dann kannst du den auf einen anderen freien digitalen Pin legen und im Sketch anpassen.

Das ist ja das Problem, D5 wird vom Display gebraucht und kann daher nicht vom RFID-Sensor genutzt werden.
Scheint aber kein Problem zu sein, den einfach auf einen anderen digitalten Pin zu legen.

finebel:
Das ist ja das Problem, D5 wird vom Display gebraucht und kann daher nicht vom RFID-Sensor genutzt werden.
Scheint aber kein Problem zu sein, den einfach auf einen anderen digitalten Pin zu legen.

Deswegen meine Frage....ich kann nicht alle Module und Anschaltungen im Kopf haben.
Hatte aber geschrieben, wenn CS dann kannst du den auf einen anderen Pin legen und im Sketch ändern.

Hallo ich nochmal,
der Sensor läuft jetzt zwar, aber leider nicht so wie erwünscht :frowning:
Ich habe hier mal den Sketch angehängt, er ist zwar ziemlich lang, aber der RFID-Sensor wird ja relativ zu Beginn des Loops ausgelesen.
Problem: Wenn ich eine Karte vor den RFID-Sensor halte und mir dann den Code auf den seriellen Monitor ausgeben lasse, wird entweder gar nichts, eine null, oder immer der gleiche Code angezeigt.
Es wäre super nett, wenn da einmal jemand drüber schauen könnte...
PS: Musste den Sketch jetzt kürzen, damit ich ihn hochladen kann...

// Paint example specifically for the TFTLCD breakout board.
// If using the Arduino shield, use the tftpaint_shield.pde sketch instead!
// DOES NOT CURRENTLY WORK ON ARDUINO LEONARDO
//Technical support:goodtft@163.com
//RFID und Stepper Motor

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


#define SS_PIN 53
#define RST_PIN 30
MFRC522 mfrc522(SS_PIN, RST_PIN);

long current_code = 0;
long master_code = 99028000; //long master_code = 371970;
long custom1_code = 0;
long custom2_code = 0;

/*
// Stepper
int SPU = 2048; 
Stepper Schloss(SPU, 3,5,4,6);
*/



void loop()
{
  if (mfrc522.PICC_IsNewCardPresent() || mfrc522.PICC_ReadCardSerial()){
   
  
  current_code = 0;
  /*
  for (byte i = 0; i < mfrc522.uid.size; i++){
    current_code=((current_code+mfrc522.uid.uidByte[i])*10); 
  }
  Serial.println(current_code);
  */
  Serial.print("Gelesene UID:");
    for (byte i = 0; i < mfrc522.uid.size; i++) {
      // Abstand zwischen HEX-Zahlen und führende Null bei Byte < 16
      
      Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
      Serial.print(mfrc522.uid.uidByte[i], HEX);
            
    } 
    Serial.println();
  if (current_code == master_code){
    /*digitalWrite(LED_red,HIGH);
    while (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()){
      delay(1000);
    }
    */
    //digitalWrite(LED_red,LOW);
    //Serial.println("tt");
    if(mfrc522.PICC_IsNewCardPresent() || mfrc522.PICC_ReadCardSerial()){//Abfrage um zu schauen, ob jetzt eine neue Karte vorgehalten wird.
      
    
    current_code = 0;
    for (byte i = 0; i < mfrc522.uid.size; i++){
      current_code=((current_code+mfrc522.uid.uidByte[i])*10); 
    }
    
    if (current_code == custom1_code){
      custom1_code = 0;
      loeschen1 = true;
       }
    else if (current_code == custom2_code){
      custom2_code = 0;
      loeschen2 = true;
    }
    //Bis hier geht es darum, mit Masterkarte Tag und Karte zu löschen?...
    //Ab hier kann man dann wieder neue Karte, Tag hinzufügen (wenn sie schon gelöscht wurde und einmal ganz am Anfang)...
    else {
      if (custom1_code == 0){
        custom1_code = current_code; //custom1 = Zugangstag: custom2 = Zugangskarte:
        loeschen1 = 0;
      }
      else if (custom2_code == 0){
        custom2_code = current_code;
        loeschen2 = 0;
      }
      //else {
      //  Serial.println("Benutzer kann nicht hinzugefügt werden");
      //}
    }
  }
  }
  else {//Wenn es nicht die MasterKarte ist, die vorgehalten wird...
    if (current_code == custom1_code || current_code == custom2_code){//Diese if Abfrage eigentlich unnötig...
     // Schloss.step(2048);//Schloss auf.
      /*
      delay(5000);
      Schloss.step(-2048);//Tür zu machen wir über das Display mit HINWEIS wenn man reinkommt.
    }//An dieser Stelle Sketch leicht geändert (costum2_code oben oder verknüpft).
    /*
    else {
      digitalWrite(LED_red, HIGH);
      delay(del);
      digitalWrite(LED_red, LOW);
      delay(del);
    }
    */
  }
  }
  }

Na ja... den Code hast Du aber nie kompilieren lassen :frowning:

Die Setup-Funktion hast Du uns vorenthalten.

Die Ausgabe der UID auf die serielle Schnittstelle kannst Du einfacher haben:

mfrc522.PICC_DumpToSerial(&(mfrc522.uid))
Die Zeile habe ich [url=https://playground.arduino.cc/Learning/MFRC522]hier geklaut[/url]

.

Dort findest Du auch die Anregung, den Test auf neue Karte und das Auslesen der UID zu trennen. Wenn es nämlich eine neue Karte gibt, ist die Bedingung bereits erfüllt - warum sollte dann der zweite Teil (das Lesen der UID) noch ausgeführt werden?

Beim Zusammenklauben des "current_code" aus den UID-Bytes multiplizierst Du pro Byte mit 10 (dezimal). Das verstehe ich nicht.

/Walter

finebel:
Problem: Wenn ich eine Karte vor den RFID-Sensor halte und mir dann den Code auf den seriellen Monitor ausgeben lasse, wird entweder gar nichts, eine null, oder immer der gleiche Code angezeigt.

finebel:
Gibt es eine Lösung das ich den RFID-Sensor so anschließen kann, dass ich gleichzeitig das tft-Display verwenden kann (Dieses belegt momentan D0-D13, A0-A5)

Wenn das TFT D0-D13 wirklich belegt und die serielle Schnittstelle über den USB Anschluss benutzt wird, kann das nicht gehen. D0 und D1 werden für die serielle Schnittstelle benötigt.
Dann muß entweder eine der anderen seriellen Schnittstellen und ein USB/seriell Wandler benutzt werden oder das Shield muß inklusive dem Code modifiziert werden.

Gruß, Jürgen