Arduino RFID lock card problem

Mein problem bezieht sich dadrauf dass ich nur eine keycard registrieren kann und nicht weiß wie ich es hinbekomme mehrere zu registrieren.
ich würde mich über jede Hilfe freuen

Hier der Code:

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

Servo motor1;
 
#define SS_PIN 10
#define RST_PIN 9
#define ACCESS_DELAY 10000
#define DENIED_DELAY 1000
MFRC522 mfrc522(SS_PIN, RST_PIN);   
 
void setup() 
{
  Serial.begin(9600);   
  SPI.begin();          
  mfrc522.PCD_Init();   
  motor1.attach(8);
  motor1.write(1);
  Serial.println("Put your card to the reader...");
  Serial.println();
  
  
}
void loop() 
{
  
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
    delay(100); 
  }
  
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
    delay(100);
  }
  
  Serial.print("UID tag :");
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "DA 7F E6 81") //Hier kommt der key hin  
  {
    Serial.println("Authorized access");
    Serial.println();
    motor1.write(180);
    delay(10000);
    motor1.write(180);
    delay(ACCESS_DELAY);
    motor1.write(1);
    delay(500);
  }
 
 else   {
    Serial.println(" Access denied");
    delay(DENIED_DELAY);
  }
}

Wenn ich dich richtig verstehe, willst du hier

mehrere mögliche Werte zulassen ?

Sinnvoll wäre ein Array aller registrierten Werte und diese abfragen, bis ein passender gefunden ist, und nur wenn keiner passt, den "Access denied" Zweig anspringen.

Dann frage ich mich auch, ob es interessant ist, welcher der möglichen keys gefunden wurde.

Und wenn der key immer nur 4 byte groß ist, würde ich auf die String - Objekte verzichten, mindestens bei einem kleinen AVR (8bit)-Arduino.

1 Like

Ich werde versuchen deine idee umzusetzen vielen dank ich habe noch nicht wirklich ahnung und habe mich eher an videos entlang gehangelt

1 Like

Schön, dass du durch Video gucken schon so weit gekommen bist.
Ich hatte gehofft, dass dir selber machen Spaß macht. Na denn !

( Nach einem return; ist übrigens egal, ob danach eine Anweisung kommt. Das spricht (wenn so gefunden) eher gegen die Vorlage)

Ich habe jetzt etwas herum versucht und möchte mich nochmal für mein nicht können entschuldigen. Ich muss aber leider zu geben das ich nicht viel weiter gekommen bin.

Ich habe versucht mich ein bisschen über arrays etc schlauer zu machen, kann mir aber immer noch nicht wirklich vorstellen, wie ich dies nun mit der abfrage umsetzen soll.

Ich weiß nicht ob das hilft aber ich möchte mit dem code nur bezwecken ein servo motor per zwei unterschiedlichen rfid karten auf und zu gehen zu lassen.

wenn das wirklich für eine Karte funktioniert

if (content.substring(1) == "DA 7F E6 81") //Hier kommt der key hin  

was spricht dann gegen eine weitere Angabe mittels OR?

if (content.substring(1) == "DA 7F E6 81" || content.substring(1) == "DA 7F E6 81") //Hier kommen die keys hin 

ja ist hässlich, aber das ganze gewinnt eh keinen Schönheitspreis.
Ein Versuch wäre es wert.

1 Like

Vielen dank ich werde es versuchen ich habe wie gesagt eigentlich keine Ahnung von dem ganzen also bin ich für alle Vorschläge dankbar.

Ich habe aber noch ein Problem, manchmal passiert wenn ich die rfid Karte scanne einfach nichts mehr, das ist zwar erst 3 mal aufgetreten aber wenn ich das ganze vom Strom nehme oder restarte klappt es wieder. Hat da jemand eine Idee?

Vielen Dank deine Idee hat sehr gut funktioniert

Da die eigentliche Frage mit dem ODER - Tip schon gelöst ist, schlage ich vor, dass du dir dieses Problem erstmal genauer anschaust (Testausgaben), eingrenzt, und möglichst auch klarer beschreibst. In einem neuen Thread.

1 Like