Hola buenos días a todos. Estoy trabajando en un programa que lea tarjetas RFID y guárdalas en una tarjeta sd, básicamente para pasar lista en clase con una tarjeta. El punto que hice este dicho programa y no me lee la tarjeta sd.
Adjunto programa:
#include <SPI.h>
#include <MFRC522.h>
#include <SD.h>
File myFile;
#define RST_PIN 9 //Pin 9 para el reset del RC522
#define SS_PIN 10 //Pin 10 para el SS (SDA) del RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); ///Creamos el objeto para el RC522
void setup() {
Serial.begin(9600); //Iniciamos La comunicacion serial
SPI.begin(); //Iniciamos el Bus SPI
mfrc522.PCD_Init(); // Iniciamos el MFRC522
Serial.println("Control de acceso:");
Serial.print("Iniciando SD ...");
if (!SD.begin(5)) {
Serial.println("No se pudo inicializar");
return;
}
Serial.println("inicializacion exitosa");
}
byte ActualUID[4]; //almacenará el código del Tag leído
byte Usuario1[4]= {0x73, 0x42, 0x85, 0xA7} ; //código del usuario 1 Pedro Pdrinhio
byte Usuario2[4]= {0xC1, 0x2F, 0xD6, 0x0E} ; //código del usuario 2
void loop() {
// Revisamos si hay nuevas tarjetas presentes
if ( mfrc522.PICC_IsNewCardPresent())
{
//Seleccionamos una tarjeta
if ( mfrc522.PICC_ReadCardSerial())
{
// Enviamos serialemente su UID
Serial.print(F("Card UID:"));
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
ActualUID[i]=mfrc522.uid.uidByte[i];
}
Serial.print(" ");
//comparamos los UID para determinar si es uno de nuestros usuarios
if(compareArray(ActualUID,Usuario1))
Serial.println("Acceso concedido...");
else if(compareArray(ActualUID,Usuario2))
Serial.println("Acceso concedido...");
else
Serial.println("Acceso denegado...");
// Terminamos la lectura de la tarjeta tarjeta actual
mfrc522.PICC_HaltA();
}
}
myFile = SD.open("datalog.csv", FILE_WRITE);//abrimos el archivo
if (myFile) {
int PedroPdrinhio = Usuario1;
Serial.print("Escribiendo SD: ");
myFile.print(" Pedro Pdrinhio=");
myFile.println(PedroPdrinhio );
myFile.close(); //cerramos el archivo
Serial.print(", Pedro Pdrinhio=");
Serial.println(PedroPdrinhio );
}
else {
Serial.println("Error al abrir el archivo");
}
delay(30000);
}
//Función para comparar dos vectores
boolean compareArray(byte array1[],byte array2[])
{
if(array1[0] != array2[0])return(false);
if(array1[1] != array2[1])return(false);
if(array1[2] != array2[2])return(false);
if(array1[3] != array2[3])return(false);
return(true);
}
Estoy totalmente seguro que me equivoque en algo del programa y le he dado varias vueltas y no consigo resolverlo, cualquier ayuda será bienvenida.
Muchas gracias de antemano y tengan buen día.
¿Podrías dar más información de qué arduino estás usando, esquema de conexiones, qué tarjeta SD, qué lector tarjeta SD, etc.? ¿qué error te da, si te da algún error? ¿cómo está formateada la SD? ...
Saludos.
Por supuesto, estoy utilizando un Arduino uno, el lector sd es el más común en usar en Arduino, y una microSD "Lerdisk" de 4GB FAT32.
El error básicamente que no me lee la tarjeta ni me la guarda, eso si, la tarjeta sd si que inicializa correctamente.
Adjunto foto de la conexión;
¡@FernandoGarcia Tiene usted toda la razón! A la hora de cablear lo hice correctamente, solo me equivoque a la hora de dibujar el esquema, ¡Siento mucho las molestias!
Hola buenos días/tardes, escribo este tema ya que tengo un problema con dicha librería ya que no me lee las tarjetas rfid y quería saber si a vosotros/as os funciona, dicha librería es esta: https://github.com/makerspaceleiden/rfid
Por ejemplo utilizo este programa y no me detecta ni una RFID (Es un programa que lee tarjetas rfid, cabe recalcar que es un programa que encontré en internet con tutorial y funcionaba)
/*
* Initial Author: ryand1011 (https://github.com/ryand1011)
*
* Reads data written by a program such as "rfid_write_personal_data.ino"
*
* See: https://github.com/miguelbalboa/rfid/tree/master/examples/rfid_write_personal_data
*
* Uses MIFARE RFID card using RFID-RC522 reader
* Uses MFRC522 - Library
* -----------------------------------------------------------------------------------------
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Reader/PCD Uno/101 Mega Nano v3 Leonardo/Micro Pro Micro
* Signal Pin Pin Pin Pin Pin Pin
* -----------------------------------------------------------------------------------------
* RST/Reset RST 9 5 D9 RESET/ICSP-5 RST
* SPI SS SDA(SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*/
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 2 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance
//*****************************************************************************************//
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
Serial.println(F("Read personal data on a MIFARE PICC:")); //shows in serial that it is ready to read
}
//*****************************************************************************************//
void loop() {
// Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory.
MFRC522::MIFARE_Key key;
for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
//some variables we need
byte block;
byte len;
MFRC522::StatusCode status;
//-------------------------------------------
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
Serial.println(F("**Card Detected:**"));
//-------------------------------------------
mfrc522.PICC_DumpDetailsToSerial(&(mfrc522.uid)); //dump some details about the card
//mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); //uncomment this to see all blocks in hex
//-------------------------------------------
Serial.print(F("Name: "));
byte buffer1[18];
block = 4;
len = 18;
//------------------------------------------- GET FIRST NAME
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 4, &key, &(mfrc522.uid)); //line 834 of MFRC522.cpp file
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer1, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
//PRINT FIRST NAME
for (uint8_t i = 0; i < 16; i++)
{
if (buffer1[i] != 32)
{
Serial.write(buffer1[i]);
}
}
Serial.print(" ");
//---------------------------------------- GET LAST NAME
byte buffer2[18];
block = 1;
status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //line 834
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Authentication failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
status = mfrc522.MIFARE_Read(block, buffer2, &len);
if (status != MFRC522::STATUS_OK) {
Serial.print(F("Reading failed: "));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
//PRINT LAST NAME
for (uint8_t i = 0; i < 16; i++) {
Serial.write(buffer2[i] );
}
//----------------------------------------
Serial.println(F("\n**End Reading**\n"));
delay(1000); //change value if you want to read cards faster
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
//*****************************************************************************************//
Yo creo que puede ser problema de la librería que uso ya que probé de todo y no me funciona correctamente. No se si a vosotros sabréis como chequearlo.
Dicha librería es esta:
Estaba utilizando también esa librería y me parece impresionante que no me funciona ni los ejemplos de este. Y pongo todos los pins correctos. ¿Estos casos son comunes?