RFID - proyecto puerta

Buenas,
estoy realizando el siguiente proyecto

con una tarjeta XDRduino UNO , RFID-RC522, Servo , Led 16x2

facil, lee la tarjeta si es correcta el led muestra el nombre y el servo se activa

todo funciona, incluso si dejo la tarjeta encima del RFID habre constantemente

la cuestion es que cuando quiere se queda colgado y ya no hace caso, no lee la tarjeta y toca resetear.

el proyecto es muy importante porque quiero que con el servo pulse un mando a distancia y habra el garaje

gracias

no se implementar un watchdog
porque el monitor serial si que funciona,

el codigo es:

#include <MFRC522.h>//Descargar e incluir la librería

#include <SPI.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3, POSITIVE);

/*
Pins SPI UNO Mega2560 Leonardo
1 (NSS) SAD (SS) 10 53 10
2 SCK 13 52 SCK1
3 MOSI 11 51 MOSI1
4 MISO 12 50 MISO1
5 IRQ * * *
6 GND GND GND GND
7 RST 5 ? Reset
8 +3.3V (VCC) 3V3 3V3 3.3V

  • No necesario
    */

#define SAD 8 // el 9 y 10 si se utiliza la libreia Servo estan deshabilitados
#define RST 5
MFRC522 nfc(SAD, RST);

Servo miServo;
const int pinServo=2;
const int pulsoMin=1000;
const int pulsoMax=2000;
int angulo;

void setup() {

lcd.begin (16,2);
lcd.clear();
lcd.setBacklight(HIGH);

miServo.attach(pinServo, pulsoMin, pulsoMax);
angulo=0;
miServo.write(angulo);

SPI.begin();
Serial.begin(115200);
Serial.println(“Buscando RC522”);
nfc.begin();
byte version = nfc.getFirmwareVersion();
if (! version) {//Entra si no encuentra el módulo.
Serial.print(“No ha encontrado RC522”);

//lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“RC522 NO ESTA”);
delay (25000);

while(1); //detener
}

Serial.println(“Ha encontrado RC522”);

Serial.print(“Firmware version 0x”);
Serial.print(version, HEX);
Serial.println(".");

//lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(“RC522 Operativo”);
delay (5000);
lcd.clear();
lcd.print(“Aproxime”);
lcd.setCursor(0,1);
lcd.print(“la tarjeta”);

}

#define AUTHORIZED_COUNT 2 //Para autoriazar más tarjetas ponemos el número aqui y la añadimos abajo
byte Authorized[AUTHORIZED_COUNT][6] = {

{0x26, 0x20, 0x8E, 0x1, 0x89},
{0x42, 0x55, 0x31, 0x23, 0x5}

};

//42 55 31 23 5 Llavero
//26 20 8E 1 89 Tarjeta

String ArrayTexto[AUTHORIZED_COUNT][1]={ {“Francisco”},{“Pilar”} };

void printSerial(byte *serial);
boolean isSame(byte *key, byte *serial);
boolean isAuthorized(byte *serial);

byte indiceArray;
int n=0;

void loop() {
Serial.print("Procesando… ");
Serial.println(n);
n++;
byte status;
byte data[MAX_LEN];
byte serial[5];
boolean Abierto = false;

status = nfc.requestTag(MF1_REQIDL, data);

if (status == MI_OK) {
status = nfc.antiCollision(data);
memcpy(serial, data, 5);

if(isAuthorized(serial))
{
Serial.println(“Autorizado”);
Serial.print(“Indice = “);
Serial.println(indiceArray);
Serial.println(”—”);
Serial.println(ArrayTexto[indiceArray][0]);

lcd.clear();
//lcd.setBacklight(HIGH);
lcd.setCursor(0,0);
lcd.print(ArrayTexto[indiceArray][0]);
lcd.setCursor(0,1);
lcd.print(“Abriendo Puerta”);
delay (2000);

Abierto = true;
angulo=30;
miServo.write(angulo);
delay(20);
delay(1000); //esperamos un segundo y volvemos a angulo 0;
angulo=0;
miServo.write(angulo);

lcd.clear();
lcd.print(“Aproxime”);
lcd.setCursor(0,1);
lcd.print(“la tarjeta”);

}
else
{
printSerial(serial);
Serial.println(“NO autorizado”);
Abierto = false;
}

nfc.haltTag();

delay(2000);
}//if (status == MI_OK)

delay(500);

}//void loop()

boolean isSame(byte key, byte serial)
{
for (int i = 0; i < 4; i++) {
if (key _!= serial
)
_
* {*
* return false;*
* }*
* }*

* return true;*
}
boolean isAuthorized(byte *serial)
{
* for(int i = 0; i<AUTHORIZED_COUNT; i++)
_
{_
_
indiceArray=i;_
_ if(isSame(serial, Authorized))
return true;
}
return false;
}
void printSerial(byte *serial)
{
Serial.print(“Serial:”);
for (int i = 0; i < 5; i++) {// aumentar a 5 para leer el número de la tarjeta completo*
Serial.print(serial*, HEX);
Serial.print(" ");
}
}*_

¿Has conseguido que funcione correctamente sin resetear?

A mí me ocurre lo mismo.

Gracias.

De donde alimentas el servo?