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.?