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 } }