Boa nite pessoal, estou programando um arduino junto com um teclado matricial 4x4, um display 16x2 e um modulo MFRC522 para funcionar como uma ttranca por rfid e senha. Tudo até o rfid funciona perfeitamente mas apos implementar a senha com a biblioteca keypad e Password, obtenho o erro supracitado em vários pontos do programa, se não me engano 4, e não tenho ideia de como resolver pois olhando com meus olhos iniciantes não existe erro de lógica nem de sintaxe, todos os formatos corretos.
//Bibliotecas
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <Password.h>
#include <Keypad.h>
//Pinos
#define LED_VERDE 53
#define LED_VERMELHO 52
#define BUZZER 50
#define SS_PIN 53
#define RST_PIN 10
void initkey()
{
const byte rows = 4;
const byte cols = 4;
char keys[rows][cols]=
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'#','0','*','D'}
};
byte rowPins[rows] = {};
byte colPins[cols] = {};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
}
void initpass()
{
Password password = Password("123456");
}
String IDtag = ""; //Variável que armazenará o ID da Tag
bool Permitido = false; //Variável que verifica a permissão
//Vetor responsável por armazenar os ID's das Tag's cadastradas
String TagsCadastradas[] = {"6516922641",
"ID_2",
"ID_3",
"ID_4"};
MFRC522 LeitorRFID(SS_PIN, RST_PIN); // Cria uma nova instância para o leitor e passa os pinos como parâmetro
LiquidCrystal_I2C lcd(0x27, 16,2); // Cria uma nova instancia para o LCD
void setup() {
lcd.init(); //Inicia a leitura do LCD
lcd.backlight(); //Liga o LCD
lcd.clear(); //Limpa o Display
delay(100); //Espera 100 milisegundos
Serial.begin(9600); // Inicializa a comunicação Serial
SPI.begin(); // Inicializa comunicacao SPI
LeitorRFID.PCD_Init(); // Inicializa o leitor RFID
pinMode(LED_VERDE, OUTPUT); // Declara o pino do led verde como saída
pinMode(LED_VERMELHO, OUTPUT); // Declara o pino do led vermelho como saída
pinMode(BUZZER, OUTPUT); // Declara o pino do buzzer como saída
}
void loop() {
Leitura(); //Chama a função responsável por fazer a leitura das Tag's
lcd.setCursor(0,0); //Linha em que sera printado
senha();
}
void Leitura(){
lcd.print ("Apresente a TAG:"); //Texto do print
IDtag = ""; //Inicialmente IDtag deve estar vazia.
// Verifica se existe uma Tag presente
if ( !LeitorRFID.PICC_IsNewCardPresent() || !LeitorRFID.PICC_ReadCardSerial() ) {
delay(50);
return;
}
// Pega o ID da Tag através da função LeitorRFID.uid e Armazena o ID na variável IDtag
for (byte i = 0; i < LeitorRFID.uid.size; i++) {
IDtag.concat(String(LeitorRFID.uid.uidByte[i], DEC));
}
//Compara o valor do ID lido com os IDs armazenados no vetor TagsCadastradas[]
for (int i = 0; i < (sizeof(TagsCadastradas)/sizeof(String)); i++) {
if( IDtag.equalsIgnoreCase(TagsCadastradas[i]) ){
Permitido = true; //Variável Permitido assume valor verdadeiro caso o ID Lido esteja cadastrado
}
}
if(Permitido == true) acessoLiberado(); //Se a variável Permitido for verdadeira será chamada a função acessoLiberado()
else acessoNegado(); //Se não será chamada a função acessoNegado()
delay(2000); //aguarda 2 segundos para efetuar uma nova leitura
}
void acessoLiberado(){
Serial.println("Tag Cadastrada: " + IDtag); //Exibe a mensagem "Tag Cadastrada" e o ID da tag não cadastrada
efeitoPermitido(); //Chama a função efeitoPermitido()
Permitido = false; //Seta a variável Permitido como false novamente
lcd.setCursor(0,1);
lcd.print ("ACESSO LIBERADO");
delay(1500);
lcd.setCursor(0,1);
lcd.clear();
lcd.print ("Apresente a TAG:");
}
void acessoNegado(){
Serial.println("Tag NAO Cadastrada: " + IDtag); //Exibe a mensagem "Tag NAO Cadastrada" e o ID da tag cadastrada
efeitoNegado(); //Chama a função efeitoNegado()
lcd.setCursor(1,1);
lcd.print ("ACESSO NEGADO");
delay(1500);
lcd.setCursor(0,1);
lcd.clear();
lcd.print ("Apresente a TAG:");
}
void efeitoPermitido(){
Password reset();
int qtd_bips = 2; //definindo a quantidade de bips
for(int j=0; j<qtd_bips; j++){
//Ligando o buzzer com uma frequência de 1500 hz e ligando o led verde.
tone(BUZZER,1500);
digitalWrite(LED_VERDE, HIGH);
delay(100);
//Desligando o buzzer e led verde.
noTone(BUZZER);
digitalWrite(LED_VERDE, LOW);
delay(100);
}
}
void efeitoNegado(){
Password reset();
int qtd_bips = 1; //definindo a quantidade de bips
for(int j=0; j<qtd_bips; j++){
//Ligando o buzzer com uma frequência de 500 hz e ligando o led vermelho.
tone(BUZZER,500);
digitalWrite(LED_VERMELHO, HIGH);
delay(500);
//Desligando o buzzer e o led vermelho.
noTone(BUZZER);
digitalWrite(LED_VERMELHO, LOW);
delay(500);
}
}
void senha()
{
char chave;
int cont;
bool permissao;
chave = Keypad.getKey();
if(chave != NO_KEY && chave == '#')
{
for(cont = 0; cont<6; cont++)
{
chave = Keypad waitForKey();
Password append(chave);
}
permissao = Password evaluate();
if(permissao == true)
efeitoPermitido();
else
efeitoNegado();
chave = 0;
}
}
Rfid_controle_de_acesso.rar