Olá pessoal,
Estou fazendo um projeto para controle de acessos.
Objetivo do projeto
Leitor RFID onde quando o usuário está permitido ele aciona um Rele que abre uma fechadura elétrica.
Problema
O código está funcionando direitinho, o problema é que ele está fazendo múltiplas leituras quando um cartão está presente e não toma a ação enquanto não remover o cartão do leitor.
Por exemplo: Se eu aproximar e remover bem rápido um cartão do leitor RFID, ele lê o conteúdo e toma a ação necessária, porém se eu deixar o cartão em cima do leitor RFID, ele fica lendo múltiplas vezes a mesma coisa e não toma ação nenhuma (como se o RFID estivesse "ocupado")
O que preciso de ajuda
Gostaria da ajuda de vocês para que ele fizesse a leitura apenas algumas vezes do conteúdo do cartão e já tomasse a ação necessária. Tentei usar o millis() mas não tive sucesso, pode ser que não tenha usado da forma correta. Conseguem me dar um auxilio?
Sketch
--------------------------------------------------------------------------------------------
//Programa: Leitor RFID RDM6300#include /font>SoftwareSerial.h> #include /font>RDM6300.h>
#define Rele 7 //Definição do pino de controle do Rele
//Inicializa a serial nos pinos 2 (RX) e 3 (TX)
SoftwareSerial rfid(0, 1);
#define ADD_TAG_CODE "ACBBB0136BDF" // TAG ID que adiciona cartões permitidos
#define DEL_TAG_CODE "210014E2BD6A" //TAG ID que deleta cartões permitidos
String msg;
String ID = "01001C9D55D5,0100179C54DE"; //string para guardar cartões permitidos
int Buzzer = 10;
void setup()
{
Serial.begin(9600);
Serial.println("Serial Ready");
rfid.begin(9600);
Serial.println("RFID Ready");
pinMode(Rele, OUTPUT); //Pino declarado como saída
pinMode(Buzzer, OUTPUT); //Pino Buzzer declarado como saída
}
char c;
void loop(){
while(rfid.available()>0){
c=rfid.read();
msg += c;
Serial.println(msg);
Serial.println(msg.length());
}
msg=msg.substring(1,13);
if(msg.indexOf(ADD_TAG_CODE)>=0) add();
else if(msg.indexOf(DEL_TAG_CODE)>=0) del();
else if(msg.length()>10) verifica();
msg="";
}
void add(){
Serial.print("Para qual cartão deseja dar acesso?: ");
msg="";
while(msg.length()/font>13){
while(rfid.available()>0){
c=rfid.read();
msg += c;
}
}
if(ID.indexOf(msg)>=0) {
Serial.println("\nAcesso garantido para este cartão.");
msg="";
}
else{
Serial.print("Card: ");
Serial.println(msg);
ID += msg;
ID += ",";
//Serial.print("ID: ");
// Serial.println(ID);
msg="";
Serial.println("Acesso permitido para este cartão.");
}
}
void del(){
msg="";
Serial.print("Qual TAG você deseja negar o acesso?: ");
while(msg.length()/font>13){
while(rfid.available()>0){
c=rfid.read();
msg += c;
}
}
msg=msg.substring(1,13);
if(ID.indexOf(msg)>=0){
Serial.println(msg);
Serial.println("TAG encontrada. Acesso permitido para este cartão.");
//ID.replace(card,"");
int pos=ID.indexOf(msg);
msg="";
msg += ID.substring(0,pos);
msg += ID.substring(pos+15,ID.length());
ID="";
ID += msg;
//Serial.print("ID: ");
//Serial.println(ID);
} else Serial.println("\nTAG não encontrada ou já negada");
msg="";
}
void verifica(){
msg=msg.substring(1,13);
if(ID.indexOf(msg)>=0){
Serial.println("Acesso permitido.");
tone(Buzzer, 2500, 150);
digitalWrite(Rele, HIGH);
delay(1000);
digitalWrite(Rele, LOW);
delay(1000);
return;
}
else Serial.println("Acesso negado.");
tone(Buzzer, 500, 300);
}
--------------------------------------------------------------------------------------------
Tags:
Boa noite TS,
leia : http://labdegaragem.com/forum/topics/sugest-o-de-como-postar?overri...
Recomendo remover o sketch colado na area de texto do topico.
RV
Interessante que o "card_status" não funcionou nem no meu sketch nem no do exemplo do artigo. Eu tenho um sketch aqui que lê uma vez só, porém não toma ação nenhuma. Quer que eu compartilhe?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por