Pessoal, boa tarde.

Estou utilizando um modulo RFID e criei 2 arrays para guardar as chaves válidas e bloqueadas.

Qual é a lógica do loop:

Usando um "for" o código varre o primeiro array de chaves válidas. Se achar ok. Senão usando outro "for" procura no array de chaves bloqueadas. Se não estiver em nenhum desses arrays ele informa que a chave não esta cadastrada e mostra o UID da chave. Obviamente não liberando o acesso nesses dois últimos casos.

Os Problemas:

1 - Olhando o array de chaves bloqueadas, percebam que eu coloquei 2 chaves, uma na posição 0 e outra na posição 4, isso para que no teste eu garantisse que meu código estaria varrendo todo o array. Mas ai que está o problema, ele não esta varrendo todo o array. Quando utilizo essa última chave que esta cadastrada nos bloqueados ele não informa sobre chave bloqueada e sim inexistente.

2 - Tem um terceiro array que é de "nomes de usuários". A ideia seria associar esses itens de nomes as chaves autorizadas. Então quando uma chave autorizada é encontrada ela associa a posição e concatena no resultado o nome do usuário conforme a posição da chave. Como eu faria isso?

Tem um video que fiz para um colega me ajudar mas não descobrimos ainda. Pode servir como referencia para entender melhor o problema:

https://www.youtube.com/watch?v=51drMceBehs

Vocês tem alguma ideia do que pode estar acontecendo? E como fazer para associar uma chave válida ao nome do usuário?


Segue código abaixo:

Obrigado.

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

//Pinos do LED RGB
int ledVermelho = 2;
int ledVerde = 3;
int ledAzul = 4;

// ******* CHAVES AUTORIZADAS *******
char* cartAut[] = {
/*0*/ "E4 DD 1F 2B", //CHAVE 1 (este é o cartão 1)
/*1*/ "XX XX XX XX", //CHAVE 2
/*2*/ "XX XX XX XX", //CHAVE 3
/*3*/ "XX XX XX XX", //CHAVE 4
/*4*/ "A9 60 90 85", //CHAVE 5
};

// ******* NOME DOS USUÁRIOS *******
char* cartName[] = {
/*0*/ "RAPHAEL", // USUARIO 1
/*1*/ "NOME DO USUARIO", // USUARIO 2
/*2*/ "NOME DO USUARIO", // USUARIO 3
/*3*/ "NOME DO USUARIO", // USUARIO 4
/*4*/ "NOME DO USUARIO", // USUARIO 5
};

// ******* CHAVES BLOQUEADAS *******
char* cartBlock[] = {
/*0*/ "42 F9 1C 2B", //CHAVE BLOQUEADA 1 (este é o cartão 2)
/*1*/ "XX XX XX XX", //CHAVE BLOQUEADA 2
/*2*/ "XX XX XX XX", //CHAVE BLOQUEADA 3
/*3*/ "XX XX XX XX", //CHAVE BLOQUEADA 4
/*4*/ "16 C5 BA 2D", //CHAVE BLOQUEADA 5
};

//char st[20];


void setup()
{
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
mensageminicial();

//Inicia os pinos do LED RGB como saida
pinMode(ledVermelho, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledAzul, OUTPUT);
}


void loop()
{

// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

// CONVERTE O ID DO CARTÃO PARA HEXADECIMAL MAIÚSCULO
String conteudo = "";
byte letra;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}

//boolean tagVerificada = false;
conteudo.toUpperCase();

// ****** CHECA AUTORIZADOS *******
for ( uint8_t a = 0; a < sizeof( cartAut ) / sizeof( cartAut[0] ); a++ ) {
if (conteudo.substring(1) == cartAut[a])
{
Serial.println("Acesso Liberado... ");
Serial.print("Bem vindo: ");
Serial.print(cartName[0]);
Serial.println();
//tagVerificada = true;
tagValida();
//delay(3000);
mensageminicial();
conteudo = "";
return;
}
}

//****** CHECA BLOQUEADOS *******
for ( uint8_t b = 0; b < sizeof( cartBlock ) / sizeof( cartBlock[0] ); b++ ) {
if (conteudo.substring(1) == cartBlock[b])
{
Serial.println("Desculpe, este cartao foi bloqueado!");
tagInvalida();
conteudo = "";
mensageminicial();
return;
}

// ****** AVISA QUE CARTÃO NÃO ESTÁ AUTORIZADO E IMPRIME ID *******
else {
Serial.println("Acesso negado!");
Serial.print("UID: ");
Serial.print(conteudo);
Serial.println();
tagInvalida();
mensageminicial();
conteudo = "";
return;
}
}
}

// MENSAGEM INICIAL
void mensageminicial()
{
Serial.println();
Serial.println("Ola! Aproxime o seu cartao do leitor...");
digitalWrite(ledAzul, LOW);
digitalWrite(ledVermelho, HIGH);
digitalWrite(ledVerde, HIGH);
}


//Metodo chamado quando a tag é valida e cadastrada
void tagValida()
{
digitalWrite(ledAzul, HIGH);
digitalWrite(ledVermelho, HIGH);
digitalWrite(ledVerde, LOW);
delay(3000);
}

//Metodo chamado quando a tag invalida / desconhecida
void tagInvalida()
{
digitalWrite(ledAzul, HIGH);
digitalWrite(ledVermelho, LOW);
digitalWrite(ledVerde, HIGH);
delay(3000);
}

Exibições: 304

Responder esta

Respostas a este tópico

Problema 1 resolvido...

Parece que o problema era o ELSE que estava dentro do segundo FOR.

Para corrigir o problema bastou trocar por uma terceira instrução usando IF.   E colocar fora desse FOR.

Agora o problema 2 ainda não resolvi: como faz para saber a posição de um item de array encontrado com sucesso nas chaves autorizadas?

Obrigado.

Não sei entendi muito bem com qual variável você quer concatenar o nome, mas para exibir o nome autorizado, substitua cartName[0] por cartName[a] depois da mensagem de bem vindo.

Ola José, obrigado pela resposta.

Fiz isso e funcionou sim =D

Obrigado.

Abs

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço