aaa
Dependencies: MFRC522 eeprom mbed
Revision 1:fd613df5ffd3, committed 2017-07-08
- Comitter:
- thiagohuang
- Date:
- Sat Jul 08 01:24:12 2017 +0000
- Parent:
- 0:fa7c728bf941
- Commit message:
- Arquivos do Projeto Final - Thiago e Walter Truman M
Changed in this revision
| teste.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/teste.cpp Wed Jul 05 20:41:03 2017 +0000
+++ b/teste.cpp Sat Jul 08 01:24:12 2017 +0000
@@ -83,6 +83,7 @@
return;
}
+/* Função "pula_linha" vai para a linha de baixo do LCD para escrita */
void pula_linha(){
dc = 0;
wait_ms(tms);
@@ -97,6 +98,7 @@
return;
}
+/* Função "limpa_lcd" limpa a tela do LCD */
void limpa_lcd(void){
dc = 0;
@@ -112,6 +114,7 @@
return;
}
+/* Função "escreve_lcd" escreve a string passada na linha do LCD */
void escreve_lcd (char *s){
while(*s){
@@ -125,15 +128,17 @@
return ;
}
+/* Função "escreve_mem" colaca o dado passado na posição passada */
void escreve_mem(int8_t dado, uint8_t i){
int8_t buf, elementos;
LedGreen = 0;
i2c.read(0, elementos); wait_ms(1);
buf=dado;
- i2c.write(5*elementos+1+i, buf); wait_ms(1);//escreve na memoria
+ i2c.write(5*elementos+1+i, buf); wait_ms(1); //escreve na memoria o dado passado por referência
}
+/* Função "read_mem" lê a posição requisitada e retorna o seu valor */
char read_mem(uint8_t posicao, uint8_t i){
char x;
int8_t buf, elementos;
@@ -144,12 +149,14 @@
printf("A posicao requisitada excede o numero de elementos registrados na memoria\n\r");
return -1;
}else{
- i2c.read(5*(posicao-1)+1+i, buf); wait_ms(1);
+ i2c.read(5*(posicao-1)+1+i, buf); wait_ms(1); // Lê a posição requisitada e coloca na variável "buf"
x=buf;
return x;
}
}
+/* Função "pega_id" pega o ID do cartão aproximado
+ copia na string passada */
void pega_id (char *s){
int i=0;
@@ -159,7 +166,7 @@
inicio:
- if(flag_mudamodo==1)
+ if(flag_mudamodo==1) // Caso o usuário aperte algum botão, sai da função
return;
if ( ! RfChip.PICC_IsNewCardPresent()){ // Look for new cards
@@ -172,7 +179,7 @@
LedGreen = 0;
wait(0.3);
LedGreen = 1;
- for (i=0; i < RfChip.uid.size; i++){
+ for (i=0; i < RfChip.uid.size; i++){ // Copia o ID do cartão na string passada de parâmetro
buf=RfChip.uid.uidByte[i];
*(s+i)=buf;
}
@@ -183,7 +190,7 @@
}
/* Verifica se o ID passado ja esta na memoria
- Caso ja esteja, o programa retorna 1. Caso contrario, retorna 0 */
+ Caso ja esteja, o programa retorna k+1. Caso contrario, retorna 0 */
int jaexiste (char *idcartao){
int k,i;
@@ -192,13 +199,17 @@
i2c.read(0, elementos); wait_ms(1);
- for (k=0;k<elementos;k++){
- for (i=0; i < 4; i++){
+ for (k=0;k<elementos;k++){ // Laço para andar na memória nos diversos cartões salvos
+ for (i=0; i < 4; i++){ // Salva o ID da memória na string auxiliar "compara"
i2c.read(5*k+1+i, buf); wait_ms(1);
compara[i]=buf;
}
- if ( (compara[0] == *(idcartao)) && (compara[1] == *(idcartao+1)) && (compara[2] == *(idcartao+2)) && (compara[3] == *(idcartao+3)) )
+ // Compara o ID do cartão aproximado com o ID da memória
+ if((compara[0] == *(idcartao)) &&
+ (compara[1] == *(idcartao+1)) &&
+ (compara[2] == *(idcartao+2)) &&
+ (compara[3] == *(idcartao+3)))
return k+1;
}
@@ -206,6 +217,7 @@
}
+/* Função "printa_id" printa o ID passado por referência */
void printa_id (char *id){
int i;
@@ -213,14 +225,16 @@
for (i=0; i<4 ; i++){
printf("%d ",*(id+i));
}
-
+ return;
}
-
+/* Função "colocamemoria" insere as informações do cartão
+ aproximado (ID e senha inserida) na memória */
void colocamemoria(char *idcartao){
int8_t elementos,i,buf,senha;
+ // Escreve na última posição da memória o ID do novo cartão cadastrado
for (i=0; i < 4; i++){
escreve_mem( *(idcartao+i), i);
}
@@ -231,7 +245,7 @@
i2c.read(0, elementos); wait_ms(1);
elementos++;
- i2c.write(5*elementos, buf); wait_ms(1);
+ i2c.write(5*elementos, buf); wait_ms(1); //Escreve a senha inserida pela usuário na memória
printf("\n\n\rCartao de ID ");
printa_id(idcartao);
@@ -243,6 +257,8 @@
return;
}
+/* A função modo_cadastro faz o cadastro dos novos cartões solicitando que o usuário
+ insera uma senha relacionado ao ID cadastrado */
void modo_cadastro (){
char id_cartao[4];
@@ -253,43 +269,49 @@
printf("Aproxime Cartao do Leitor. \n\r");
pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
+ // Trecho abaixo faz com que o modo seja trocado caso o usuário tenha solicitado um modo diferente
if(flag_mudamodo==1){
flag_mudamodo=0;
return;
}
wait_ms(10);
- if( jaexiste(id_cartao)!=0 ){
+ if( jaexiste(id_cartao)!=0 ){ // Caso o cartão já esteja cadastrado
printf("O cartao de ID ");
printa_id(id_cartao);
printf("ja esta cadastrado.\n\r");
}
- else
- colocamemoria(id_cartao);
+ else // Caso o cartão não esteja cadastrado
+ colocamemoria(id_cartao); // Função "colocamemoria" cadastra o novo cartão
wait_ms(50);
return ;
}
+/* A função "modo_descadastro" pega o ID do cartão aproximado e descadastra
+ caso o cartão seja encontrado na memória */
void modo_descadastro (){
char id_cartao[4],aux[5];
int8_t elementos,k,i,buf;
- i2c.read(0, elementos); wait_ms(1);
+ i2c.read(0, elementos); wait_ms(1); // Variável "elementos" recebe a quantidade de cartões cadastrados
printf("\n\rMODO DESCADASTRO ATIVADO.\n\r");
printf("Aproxime Cartao do Leitor. \n\r");
pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
+ // Trecho abaixo faz com que o modo seja trocado caso o usuário tenha solicitado um modo diferente
if(flag_mudamodo==1){
flag_mudamodo=0;
return;
}
+
k=jaexiste(id_cartao);
- if( k!=0 ){
- if(elementos==1){
+ if( k!=0 ){ // Entra caso o ID do cartão aproximado seja encontrado na memória
+ //Caso haja apenas um elemento, esse elemento é apagado e muda-se automaticamente para o Modo Cadastro
+ if(elementos==1){
printf("Cartao de ID ");
printa_id(id_cartao);
printf("descadastrado com sucesso.\n\r");
@@ -301,13 +323,15 @@
flag_descadastro=0;
return;
}
- else{
+ /* Caso haja mais de um cartão cadastrado, copia-se o último elemento na string "aux"
+ e coloca na posição do cartão encontrado */
+ else{
for (i=0; i < 5; i++){
i2c.read(5*(elementos-1)+1+i, buf); wait_ms(1);
aux[i]=buf;
}
for (i=0; i < 5; i++){
- i2c.write(5*(k-1)+1+i, aux[i]); wait_ms(1);//escreve na memoria
+ i2c.write(5*(k-1)+1+i, aux[i]); wait_ms(1); //Escreve na posição descadastrada o último elemento
}
printf("Elemento %d desregistrado com sucesso.\n\r",k);
elementos--;
@@ -315,7 +339,7 @@
return;
}
}
- else{
+ else{ //Entra se k=0 (quando não o cartão não é encontrado na memória)
printf("Cartao nao esta registrado.\n\r");
}
@@ -323,38 +347,46 @@
return ;
}
+/* A função "modo_identificacao" corresponde ao modo de leitura de cartões
+ para permitir o acesso do usuario */
void modo_identificacao (){
int k;
char id_cartao[4];
int8_t elementos,senha,buf;
- i2c.read(0, elementos); wait_ms(1);
+ i2c.read(0, elementos); wait_ms(1); // Coloca em "elementos" o numero de cartões cadastrados na memória
printf("\n\rMODO IDENTIFICACAO ATIVADO\n\r");
printf("Aproxime Cartao do Leitor. \n\r");
pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
+ // Trecho abaixo faz com que o modo seja trocado caso o usuário tenha solicitado um modo diferente
if(flag_mudamodo==1){
flag_mudamodo=0;
return;
}
- k=jaexiste(id_cartao);
- if(k!=0){
+ /* Variável "k" recebe a posição na memória do cartão aproximado. Caso o cartão aproximado não seja encontrado, k recebe 0 */
+ k=jaexiste(id_cartao);
+ if(k!=0){ // Entra caso o cartão seja encontrado na memória
printf("Digite a senha: \n\r");
scanf("%d",&senha);
- i2c.read(5*k, buf); wait_ms(1);
-
- if (senha==buf) printf("Senha Correta - Acesso Permitido.\n\r");
+ printf("Senha inserida: %d\n\r",senha);
+ i2c.read(5*k, buf); wait_ms(1); //Variável "buf" recebe a senha cadastrada na memória
+ //Comparações da senha digitada com a senha cadastrada
+ if (senha==buf) printf("Senha Correta - Acesso Permitido.\n\r");
else printf("Senha Incorreta - Acesso Negado.\n\r");
}
- else
+ else //Entra caso k seja 0
printf("Cartao Nao Esta Cadastrado.\n\r\n\r");
return;
}
-
+// As 3 funções abaixo setam as flags necessárias para que a função correta
+// seja ativada quando a tecla correspondente é pressionada.
+// A condição no início muda "flag_mudamodo" para indicar que haverá
+// uma mudança no modo ativo do programa.
void isr1() {
if(flag_identificacao==0)
@@ -364,7 +396,6 @@
flag_cadastro=0;
flag_descadastro=0;
}
-
void isr2() {
if(flag_descadastro==0)
@@ -372,11 +403,8 @@
flag_identificacao=0;
flag_cadastro=0;
- flag_descadastro=1;
-
+ flag_descadastro=1;
}
-
-
void isr3() {
if(flag_cadastro==0)
@@ -385,7 +413,6 @@
flag_identificacao=0;
flag_cadastro=1;
flag_descadastro=0;
-
}
@@ -407,32 +434,32 @@
i2c.read(0,elementos); wait_ms(1);
- button1.rise(&isr1);
- button2.fall(&isr2);
- button3.fall(&isr3);
+ button1.rise(&isr1); // Ativa quando a tecla "*" é pressionada
+ button2.fall(&isr2); // Ativa quando a tecla "0" é pressionada
+ button3.fall(&isr3); // Ativa quando a tecla "#" é pressionada
while (true){
- if(flag_identificacao==1){
- limpa_lcd();
+ if(flag_identificacao==1){ // Entra caso o botão correspondente seja pressionado
+ limpa_lcd();
escreve_lcd ("IDENTICACAO");
pula_linha();
escreve_lcd ("PASSE CARTAO");
- modo_identificacao();
+ modo_identificacao(); // Ativa o modo identificação
}
- if(flag_cadastro==1){
+ if(flag_cadastro==1){ // Entra caso o botão correspondente seja pressionado
limpa_lcd();
escreve_lcd ("CADASTRO");
pula_linha();
escreve_lcd ("PASSE CARTAO");
- modo_cadastro();
+ modo_cadastro(); // Ativa o modo cadastro
}
- if(flag_descadastro==1){
+ if(flag_descadastro==1){ // Entra caso o botão correspondente seja pressionado
limpa_lcd();
escreve_lcd ("DESCADASTRO");
pula_linha();
escreve_lcd ("PASSE CARTAO");
- modo_descadastro();
+ modo_descadastro(); // Ativa o modo descadastro
}
}