Sistema de Control de Acceso electronico con RFID + teclado Matricial + LCD 16x2

surbyte:
Para que vayas introduciéndote en el tema: Busque asi MFC522 MySQL en google y dió esta respuesta entre otras

https://github.com/DeligenceTechnologies/Arduino-interface-with-MySQL-for-storing-RFID-access-details

He indagado en los temas y la verdad son bastante complejos.!

Buscando consegui este proyecto que es muy similar a lo que ando tratando de hacer,

Esta es la programacion del proyecto.

#include <SPI.h>
#include <MFRC522.h>
#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); ;  // 

#define RST_PIN  9  //Pin  para el reset del RC522
#define SS_PIN  10//Pin  para el SS (SDA) del 
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.

const byte ledind=8;    //Rele del Abrepuertas
const int  timetoclean=3000;  //msecs en quitar información display
const int numcards=2;                                 //numero de tarjetas rfids que hay definidas
unsigned long rfid[numcards]={0XB5E17A25,0X95190753}; //definimos los codigos de las tarjetas (4 primeros digitos en formato hexadecimal)
char* individuo[numcards]={"HOLA: MANUEL.S","HOLA:ROSA IRENE"};      //aqui podemos introducir las personas a la que pertenecen los targetas 
unsigned long clearlcd;
boolean er;  //Cambia de estado cuando hay información en el display

const byte ROWS = 4; //four 
const byte COLS = 3; //three columns

char keys[ROWS][COLS] =
{{'1','2','3'},
 {'4','5','6'},
 {'7','8','9'},
 {'*','0','#'}};

byte rowPins[ROWS] = {3,2,1,0}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7,6,5}; // connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


const byte ncodigos=3;  //Nº de codigos que queremos usar
//Detallamos los codigos que darán paso
char* Codkeypad[ncodigos]={"555555",
                          "111111",
                         "123456"}; 
//Detallamos los saludos correspondientes a cada código
char* nombreskeypad[ncodigos]={"Hola Sr.EDUARDO",
                              "Hola Sr.GAMBOA",
                              "Buenas Sr.BRISIO"};
String pass;
byte pos= 0;

void setup() {
 Serial.begin(9600);
 SPI.begin();                // Init SPI bus
 mfrc522.PCD_Init();        // Init MFRC522 card
 lcd.begin(16,2); 
 limpialcd();       //Procedimiento borrado display
 pinMode(ledind, OUTPUT);  //Definimos el pin13 de salida
 digitalWrite(ledind, LOW);  
}

void loop() {
 
 if (er==true) if (clearlcd+timetoclean<millis()) limpialcd();
 //limpia la información del display 
 //LEE keypad
 char keypadkey = keypad.getKey();
   if (keypadkey != NO_KEY) password(keypadkey);
 MFRC522::MIFARE_Key key;
 for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
  // Look for new cards
 if ( ! mfrc522.PICC_IsNewCardPresent()) {
   
   return;
    }                //MIENTRAS NO LEA UNA NUEVA TARJETA EL PROGRAMA NO PASA DE AQUI
  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return; 
  byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
  byte buffer[18];  
  byte block  = 0;
  byte status;
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
          error();
          return;
       }
       // Read block
  byte byteCount = sizeof(buffer);
  status = mfrc522.MIFARE_Read(block, buffer, &byteCount);  
  if (status != MFRC522::STATUS_OK) {
    error();
}
       else  // Dump data
{
       
       
       //transforma los 4 primeros numeros del bloque 0 en una variable de 4 bytes para poderla comparar con las numeraciones registradas 
  unsigned long card=0;
  byte b=0;
  for (int a=3;a>-1;a--) {
  switch (a){
       case 3:  card += buffer[b]*16777216; break;
       case 2:  card += buffer[b]*65536; break;
       case 1:  card += buffer[b]*256; break;
       case 0:  card += buffer[b];break;
       }
       b++;}
  boolean encontrada=false;
  for (byte a=0;a<numcards;a++) {                      
         if (rfid[a]==card) {
           lcd.setCursor(0,0);
           lcd.print(individuo[a]);
           encontrada=true;}} //si el num de la tarjeta coincide con alguno de los definidos dice el nombre
  lcd.setCursor(0,1);
  if (encontrada) {
             lcd.print("TARJETA VALIDA:)");
             digitalWrite(ledind, HIGH); 
             delay(7000);  //Activamos el led durante 0,5 seg
             digitalWrite(ledind, LOW); }
  else 
           {lcd.print("TARJETA INVALIDA");
           lcd.setCursor(0,3); 
           lcd.print("TARJETA INVALIDA:(");}
           er=true;
           clearlcd=millis();}
  mfrc522.PICC_HaltA(); // Halt PICC
  mfrc522.PCD_StopCrypto1();  // Stop encryption on PCD       
}
//Procedimiento para cuando ha habido un error en la lectura
//de la numeración de la tarjeta
void error() {
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("Error de lectura");
 lcd.setCursor(0,1);
 lcd.print("Vuelva a pasarla");
 clearlcd=millis();
 er=true;}
//Hace un borrado del display y reinicia variables  
void limpialcd(){
 lcd.clear();
 lcd.setCursor(0,0);
 lcd.print("PASE TARJETA O ");
 lcd.setCursor(0,1);
 lcd.print("TECLEE CODIGO :)"); 
 er=false;
 pos=0;
 pass=""; 
 } 

//Hace de contador de digitos al introducir codigo y cuando
//ya se han introducido 6 digitos llama al procedimiento para
//su compruebacion

void password(char key) {
 clearlcd=millis();
  pass+= key;
 lcd.setCursor(2+pos,1);
 lcd.print("*");
 if (pos<5) 
   pos++;
   else {comprueba_codigos();pos=0;}

}  
//Comprueba si el codigo introducido esta registrado
//si lo está da acceso
void comprueba_codigos() {
 boolean encontrada=false;
 for (byte a=0; a<ncodigos;a++){ 
         String pwd = String(Codkeypad[a]);
         if (pwd==pass) {
           lcd.setCursor(0,0);
           lcd.print(nombreskeypad[a]);
           encontrada=true;}}
  lcd.setCursor(0,1);
  if (encontrada) {
             lcd.print("CODIGO VALIDO:)");
             digitalWrite(ledind, HIGH); 
             delay(7000);  //Activamos el led durante 0,5 seg
             digitalWrite(ledind, LOW); }
  else 
           {lcd.print("CODIGO INVALIDO:(");
           lcd.setCursor(0,1); 
           lcd.print("CODIGO INVALIDO:)");}
           er=true;
           clearlcd=millis();
}

pero la duda que se me crea es:

Sera que para ingresar un nuevo usuario hay que sacar el Micro y reprogramarlo.?