Guardar varias uid en la memoria eeprom

Hola, tengo un problema con respecto al guardado de uid en la memoria el cual es que con la programación que dejare abajo solo puedo guardar una uid en el byte readCard, lo que necesito es almacenar 4 o 5 uid diferentes en la memoria y no se como realizarlo.

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

#define pinRST 9      
#define pinSS 10

byte readCard[4];    
int successRead;

MFRC522 mfrc522(pinSS, pinRST);   
MFRC522::MIFARE_Key key;         

void setup()
{
  Serial.begin(9600);
  SPI.begin();        
  mfrc522.PCD_Init(); 

  Serial.println("RFID reading process initiated.");    
  Serial.println("Please scan your RFID card to the reader.");

  do {
    successRead = getID();    
  }

  while (!successRead);
  for ( int i = 0; i < mfrc522.uid.size; i++ )  
  {
    EEPROM.write(i, readCard[i] );     
  }

  Serial.println("RFID card information is saved to memory.");

}

void loop()
{
getID(); 
}


int getID() 
{
  if ( ! mfrc522.PICC_IsNewCardPresent())  
  {
    return;
  }

  if ( ! mfrc522.PICC_ReadCardSerial())    
  {
    return;
  }
  
  Serial.print("UID: ");    
  for (int i = 0; i < mfrc522.uid.size; i++) {  
    readCard[i] = mfrc522.uid.uidByte[i];   
    Serial.print(readCard[i], HEX);         
  }

  mfrc522.PICC_HaltA();     
}

Y cual es la memoria? Lo vas a guardar en la EEPROM o en una SD porque de lo contrario tendras que repetir los pasos cada vez que energices el Arduino.
Otra opción es que leas las tarjetas y guardes como constante los valores que corresponden a cada una y luego solo consultes si es la 1 2 3 o 4.

Yo creo que necesitarás un par de cosas:

  • Saber cuántas están guardadas en la memoria:
byte num_rfid=0;
...

num_rfid=EEPROM.read(0);  //en la primera posición de la eeprom guardamos el número de rfid que existen
  • Cando vayas a guardar:
num_rfid=EEPROM.read(0);
for ( int i = 0; i < mfrc522.uid.size; i++ )  
  {
    EEPROM.write(i+1(mfrc522.uid.size*num_rfid), readCard[i] );     
  }
num_rfid++;  //añadimos 1 al contador en la EEPROM
EEPROM.write(0,num_rfid);     

  • Y para leer:
num_rfid=EEPROM.read(0); //leemos cuantas RFID hay guardadas
for (int n=0; n<num_rfid;n++) {
   for (int i = 0; i < mfrc522.uid.size; i++) {  
       readCard[i] = mfrc522.uid.uidByte[i];   
     Serial.print(readCard[i], HEX);         
  }
Serial.println("")
}

Recordar que las EEPROM la tienes que incializar la primera vez y una única vez, sino te dará que hay 255 rfid :

EEPROM.write(0,0);

Saludos.

lo quiero guardar en la EEPROM

Es mas facil usar EEPROM.put y EEPROM.get pero igual funciona con read y write.

Personalmente uso lo que dice @Surbyte (put/get) pero como en su .ino aparecía read/write pues lo he puesto así.
@longh Recomiendo que le eches un vistazo a lo qeu dice Surbyte.

Muchas gracias

este codigo esta mal:

esto ni siquiera compilará

Cierto @b707 , le falta un "+" después del 1..

EEPROM.write(i+1+(mfrc522.uid.size*num_rfid), readCard[i] ); 

Recuerda que son trozos de código que no están probados.
Saludos.

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