Ok buenas tardes, estoy en un proyecto donde fabrico un compartimento secreto, la idea es darle un tag rfid a un objeto en especifico, al poner el objeto cerca del lector oculto abre el compartimento y lo mantiene iluminado por medio de un modulo relay;
hasta ahora lo unico que he podido lograr es que el relay se quede encendido por 5 minutos despues el lector haga otra lectura y si no esta la tarjeta cierra el relay,
y si esta apaga y prende el relay, es un milisegundo pero esto quiere decir que las luces parpadean y se cierra la compuerta e inmediatamente se vuelve a abrir.
lo que deseo es que: al estar el codigo cerca del lector, active y deje activado el relay, y si lo remuevo del lector lo desactive con un delay de 10 segundos, este es mi codigo actual, espero de verdad que alguien pueda ayudare en este proyecto les agradezco
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 // Configurable, see typical pin layout above
#define SS_PIN 10 // Configurable, see typical pin layout above
#define CH1 2
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
String read_rfid;
String ok_rfid_1="5665367";
//String ok_rfid_2="ffffffff";
int lock=3; //Which pin the lock will be on if using a relay or solenoid or similar
int RFID_status;
int RFID_read = 0;
/*
* Initialize.
*/
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)
SPI.begin(); // Init SPI bus
mfrc522.PCD_Init(); // Init MFRC522 card
//Choose which lock below:
pinMode(lock, OUTPUT);
pinMode(CH1, OUTPUT);
}
/*
* Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
read_rfid="";
for (byte i = 0; i < bufferSize; i++) {
read_rfid=read_rfid + String(buffer[i], HEX);
}
}
if (RFID_status != 1)
{
RFID_read 0;
}
void open_lock() {
digitalWrite(lock, HIGH);
delay(300000);
digitalWrite(lock,LOW);
}
if (RFID_read 0)
{
digitalWrite(lock,LOW);
}
void loop() {
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
return;
dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
Serial.println(read_rfid);
if (read_rfid==ok_rfid_1) {
open_lock();
}
//if (read_rfid==ok_rfid_2) {
}