aaa

Dependencies:   MFRC522 eeprom mbed

Committer:
thiagohuang
Date:
Sat Jul 08 01:24:12 2017 +0000
Revision:
1:fd613df5ffd3
Parent:
0:fa7c728bf941
Arquivos do Projeto Final - Thiago e Walter Truman M

Who changed what in which revision?

UserRevisionLine numberNew contents of line
thiagohuang 0:fa7c728bf941 1 #include "mbed.h"
thiagohuang 0:fa7c728bf941 2 #include "eeprom.h"
thiagohuang 0:fa7c728bf941 3 #include "MFRC522.h"
thiagohuang 0:fa7c728bf941 4 #include "stdlib.h"
thiagohuang 0:fa7c728bf941 5
thiagohuang 0:fa7c728bf941 6 //interrupcao botao
thiagohuang 0:fa7c728bf941 7 InterruptIn button1(PTA13);
thiagohuang 0:fa7c728bf941 8 InterruptIn button2(PTA17);
thiagohuang 0:fa7c728bf941 9 InterruptIn button3(PTA16);
thiagohuang 0:fa7c728bf941 10 DigitalOut led1(LED1);
thiagohuang 0:fa7c728bf941 11 DigitalOut led2(LED2);
thiagohuang 0:fa7c728bf941 12 DigitalOut flash(LED4);
thiagohuang 0:fa7c728bf941 13 //Timer debounce;
thiagohuang 0:fa7c728bf941 14
thiagohuang 0:fa7c728bf941 15 //LCD
thiagohuang 0:fa7c728bf941 16 #define tuss 2
thiagohuang 0:fa7c728bf941 17 #define tusl 20
thiagohuang 0:fa7c728bf941 18 #define tms 2
thiagohuang 0:fa7c728bf941 19
thiagohuang 0:fa7c728bf941 20 SPI lcd(PTE3, PTE1, PTE2);
thiagohuang 0:fa7c728bf941 21 DigitalOut cs(PTE4);
thiagohuang 0:fa7c728bf941 22 DigitalOut res(PTD5);
thiagohuang 0:fa7c728bf941 23 DigitalOut dc(PTC12);
thiagohuang 0:fa7c728bf941 24
thiagohuang 0:fa7c728bf941 25 //KL25Z Pins for MFRC522 SPI interface
thiagohuang 0:fa7c728bf941 26 #define SPI_MOSI PTC6
thiagohuang 0:fa7c728bf941 27 #define SPI_MISO PTC7
thiagohuang 0:fa7c728bf941 28 #define SPI_SCLK PTC5
thiagohuang 0:fa7c728bf941 29 #define SPI_CS PTC4
thiagohuang 0:fa7c728bf941 30 // KL25Z Pin for MFRC522 reset
thiagohuang 0:fa7c728bf941 31 #define MF_RESET PTC3
thiagohuang 0:fa7c728bf941 32
thiagohuang 0:fa7c728bf941 33 //Pinos EEPROM
thiagohuang 0:fa7c728bf941 34 #define SDA PTC2 // I2C SDA pin
thiagohuang 0:fa7c728bf941 35 #define SCL PTC1 // I2C SCL pin
thiagohuang 0:fa7c728bf941 36 #define EEPROM_CONTROL_BYTE 0xA0
thiagohuang 0:fa7c728bf941 37 #define I2C_READ 0x01
thiagohuang 0:fa7c728bf941 38
thiagohuang 0:fa7c728bf941 39 #define OFF 1
thiagohuang 0:fa7c728bf941 40 #define ON 0
thiagohuang 0:fa7c728bf941 41
thiagohuang 0:fa7c728bf941 42 DigitalOut LedRed (LED_RED);
thiagohuang 0:fa7c728bf941 43 DigitalOut LedGreen (LED_GREEN);
thiagohuang 0:fa7c728bf941 44
thiagohuang 0:fa7c728bf941 45 EEPROM i2c(SDA, SCL, 0, EEPROM::T24C16); // T24C01 should work for the 24AA02E48 eeprom
thiagohuang 0:fa7c728bf941 46 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET);
thiagohuang 0:fa7c728bf941 47
thiagohuang 0:fa7c728bf941 48 //I2C i2c(PTE0, PTE1); // sda, scl on KL25Z
thiagohuang 0:fa7c728bf941 49 Serial pc(USBTX, USBRX); // tx, rx
thiagohuang 0:fa7c728bf941 50
thiagohuang 0:fa7c728bf941 51 int flag_identificacao=1,flag_cadastro=0,flag_descadastro=0,flag_mudamodo=0;
thiagohuang 0:fa7c728bf941 52
thiagohuang 0:fa7c728bf941 53 void init_LCD(){
thiagohuang 0:fa7c728bf941 54 res = 0;
thiagohuang 0:fa7c728bf941 55 dc = 0;
thiagohuang 0:fa7c728bf941 56 cs = 1;
thiagohuang 0:fa7c728bf941 57 wait(0.1);
thiagohuang 0:fa7c728bf941 58 res = 1;
thiagohuang 0:fa7c728bf941 59 // k = 0;
thiagohuang 0:fa7c728bf941 60 cs = 0;
thiagohuang 0:fa7c728bf941 61 lcd.write(0x3C);
thiagohuang 0:fa7c728bf941 62 wait_us(tuss);
thiagohuang 0:fa7c728bf941 63 cs = 1;
thiagohuang 0:fa7c728bf941 64 wait_ms(tms);
thiagohuang 0:fa7c728bf941 65 cs = 0;
thiagohuang 0:fa7c728bf941 66 lcd.write(0x0C);
thiagohuang 0:fa7c728bf941 67 wait_us(tuss);
thiagohuang 0:fa7c728bf941 68 cs = 1;
thiagohuang 0:fa7c728bf941 69 wait_us(tusl);
thiagohuang 0:fa7c728bf941 70 cs = 0;
thiagohuang 0:fa7c728bf941 71 lcd.write(0x01);
thiagohuang 0:fa7c728bf941 72 wait_us(tuss);
thiagohuang 0:fa7c728bf941 73 cs = 1;
thiagohuang 0:fa7c728bf941 74 wait_ms(tms);
thiagohuang 0:fa7c728bf941 75 cs = 0;
thiagohuang 0:fa7c728bf941 76 lcd.write(0x06);
thiagohuang 0:fa7c728bf941 77 wait_us(tuss);
thiagohuang 0:fa7c728bf941 78 cs = 1;
thiagohuang 0:fa7c728bf941 79 wait_ms(tms);
thiagohuang 0:fa7c728bf941 80 dc = 1;
thiagohuang 0:fa7c728bf941 81 wait_ms(tms);
thiagohuang 0:fa7c728bf941 82
thiagohuang 0:fa7c728bf941 83 return;
thiagohuang 0:fa7c728bf941 84 }
thiagohuang 0:fa7c728bf941 85
thiagohuang 1:fd613df5ffd3 86 /* Função "pula_linha" vai para a linha de baixo do LCD para escrita */
thiagohuang 0:fa7c728bf941 87 void pula_linha(){
thiagohuang 0:fa7c728bf941 88 dc = 0;
thiagohuang 0:fa7c728bf941 89 wait_ms(tms);
thiagohuang 0:fa7c728bf941 90 cs = 0;
thiagohuang 0:fa7c728bf941 91 lcd.write(0xC0);
thiagohuang 0:fa7c728bf941 92 wait_us(tuss);
thiagohuang 0:fa7c728bf941 93 cs = 1;
thiagohuang 0:fa7c728bf941 94 wait_ms(tms);
thiagohuang 0:fa7c728bf941 95 dc = 1;
thiagohuang 0:fa7c728bf941 96 wait_ms(tms);
thiagohuang 0:fa7c728bf941 97
thiagohuang 0:fa7c728bf941 98 return;
thiagohuang 0:fa7c728bf941 99 }
thiagohuang 0:fa7c728bf941 100
thiagohuang 1:fd613df5ffd3 101 /* Função "limpa_lcd" limpa a tela do LCD */
thiagohuang 0:fa7c728bf941 102 void limpa_lcd(void){
thiagohuang 0:fa7c728bf941 103
thiagohuang 0:fa7c728bf941 104 dc = 0;
thiagohuang 0:fa7c728bf941 105 wait_ms(tms);
thiagohuang 0:fa7c728bf941 106 cs = 0;
thiagohuang 0:fa7c728bf941 107 lcd.write(0x01);
thiagohuang 0:fa7c728bf941 108 wait_us(tuss);
thiagohuang 0:fa7c728bf941 109 cs = 1;
thiagohuang 0:fa7c728bf941 110 wait_ms(tms);
thiagohuang 0:fa7c728bf941 111 dc = 1;
thiagohuang 0:fa7c728bf941 112 wait_ms(tms);
thiagohuang 0:fa7c728bf941 113
thiagohuang 0:fa7c728bf941 114 return;
thiagohuang 0:fa7c728bf941 115 }
thiagohuang 0:fa7c728bf941 116
thiagohuang 1:fd613df5ffd3 117 /* Função "escreve_lcd" escreve a string passada na linha do LCD */
thiagohuang 0:fa7c728bf941 118 void escreve_lcd (char *s){
thiagohuang 0:fa7c728bf941 119
thiagohuang 0:fa7c728bf941 120 while(*s){
thiagohuang 0:fa7c728bf941 121 cs = 0;
thiagohuang 0:fa7c728bf941 122 lcd.write(*s);
thiagohuang 0:fa7c728bf941 123 wait_us(tuss);
thiagohuang 0:fa7c728bf941 124 cs = 1;
thiagohuang 0:fa7c728bf941 125 wait_ms(tms);
thiagohuang 0:fa7c728bf941 126 s++;
thiagohuang 0:fa7c728bf941 127 }
thiagohuang 0:fa7c728bf941 128 return ;
thiagohuang 0:fa7c728bf941 129 }
thiagohuang 0:fa7c728bf941 130
thiagohuang 1:fd613df5ffd3 131 /* Função "escreve_mem" colaca o dado passado na posição passada */
thiagohuang 0:fa7c728bf941 132 void escreve_mem(int8_t dado, uint8_t i){
thiagohuang 0:fa7c728bf941 133 int8_t buf, elementos;
thiagohuang 0:fa7c728bf941 134
thiagohuang 0:fa7c728bf941 135 LedGreen = 0;
thiagohuang 0:fa7c728bf941 136 i2c.read(0, elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 137 buf=dado;
thiagohuang 1:fd613df5ffd3 138 i2c.write(5*elementos+1+i, buf); wait_ms(1); //escreve na memoria o dado passado por referência
thiagohuang 0:fa7c728bf941 139 }
thiagohuang 0:fa7c728bf941 140
thiagohuang 1:fd613df5ffd3 141 /* Função "read_mem" lê a posição requisitada e retorna o seu valor */
thiagohuang 0:fa7c728bf941 142 char read_mem(uint8_t posicao, uint8_t i){
thiagohuang 0:fa7c728bf941 143 char x;
thiagohuang 0:fa7c728bf941 144 int8_t buf, elementos;
thiagohuang 0:fa7c728bf941 145
thiagohuang 0:fa7c728bf941 146 i2c.read(0, elementos);
thiagohuang 0:fa7c728bf941 147 wait_ms(1);
thiagohuang 0:fa7c728bf941 148 if (elementos < posicao){
thiagohuang 0:fa7c728bf941 149 printf("A posicao requisitada excede o numero de elementos registrados na memoria\n\r");
thiagohuang 0:fa7c728bf941 150 return -1;
thiagohuang 0:fa7c728bf941 151 }else{
thiagohuang 1:fd613df5ffd3 152 i2c.read(5*(posicao-1)+1+i, buf); wait_ms(1); // Lê a posição requisitada e coloca na variável "buf"
thiagohuang 0:fa7c728bf941 153 x=buf;
thiagohuang 0:fa7c728bf941 154 return x;
thiagohuang 0:fa7c728bf941 155 }
thiagohuang 0:fa7c728bf941 156 }
thiagohuang 0:fa7c728bf941 157
thiagohuang 1:fd613df5ffd3 158 /* Função "pega_id" pega o ID do cartão aproximado
thiagohuang 1:fd613df5ffd3 159 copia na string passada */
thiagohuang 0:fa7c728bf941 160 void pega_id (char *s){
thiagohuang 0:fa7c728bf941 161
thiagohuang 0:fa7c728bf941 162 int i=0;
thiagohuang 0:fa7c728bf941 163 int8_t buf=0;
thiagohuang 0:fa7c728bf941 164
thiagohuang 0:fa7c728bf941 165 while(true){
thiagohuang 0:fa7c728bf941 166
thiagohuang 0:fa7c728bf941 167 inicio:
thiagohuang 0:fa7c728bf941 168
thiagohuang 1:fd613df5ffd3 169 if(flag_mudamodo==1) // Caso o usuário aperte algum botão, sai da função
thiagohuang 0:fa7c728bf941 170 return;
thiagohuang 0:fa7c728bf941 171
thiagohuang 0:fa7c728bf941 172 if ( ! RfChip.PICC_IsNewCardPresent()){ // Look for new cards
thiagohuang 0:fa7c728bf941 173 wait_ms(500);
thiagohuang 0:fa7c728bf941 174 goto inicio;
thiagohuang 0:fa7c728bf941 175 }
thiagohuang 0:fa7c728bf941 176 if ( ! RfChip.PICC_ReadCardSerial()){ // Select one of the cards
thiagohuang 0:fa7c728bf941 177
thiagohuang 0:fa7c728bf941 178 }
thiagohuang 0:fa7c728bf941 179 LedGreen = 0;
thiagohuang 0:fa7c728bf941 180 wait(0.3);
thiagohuang 0:fa7c728bf941 181 LedGreen = 1;
thiagohuang 1:fd613df5ffd3 182 for (i=0; i < RfChip.uid.size; i++){ // Copia o ID do cartão na string passada de parâmetro
thiagohuang 0:fa7c728bf941 183 buf=RfChip.uid.uidByte[i];
thiagohuang 0:fa7c728bf941 184 *(s+i)=buf;
thiagohuang 0:fa7c728bf941 185 }
thiagohuang 0:fa7c728bf941 186
thiagohuang 0:fa7c728bf941 187 break ;
thiagohuang 0:fa7c728bf941 188 }
thiagohuang 0:fa7c728bf941 189 return ;
thiagohuang 0:fa7c728bf941 190 }
thiagohuang 0:fa7c728bf941 191
thiagohuang 0:fa7c728bf941 192 /* Verifica se o ID passado ja esta na memoria
thiagohuang 1:fd613df5ffd3 193 Caso ja esteja, o programa retorna k+1. Caso contrario, retorna 0 */
thiagohuang 0:fa7c728bf941 194 int jaexiste (char *idcartao){
thiagohuang 0:fa7c728bf941 195
thiagohuang 0:fa7c728bf941 196 int k,i;
thiagohuang 0:fa7c728bf941 197 int8_t buf,elementos;
thiagohuang 0:fa7c728bf941 198 char compara[4];
thiagohuang 0:fa7c728bf941 199
thiagohuang 0:fa7c728bf941 200 i2c.read(0, elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 201
thiagohuang 1:fd613df5ffd3 202 for (k=0;k<elementos;k++){ // Laço para andar na memória nos diversos cartões salvos
thiagohuang 1:fd613df5ffd3 203 for (i=0; i < 4; i++){ // Salva o ID da memória na string auxiliar "compara"
thiagohuang 0:fa7c728bf941 204 i2c.read(5*k+1+i, buf); wait_ms(1);
thiagohuang 0:fa7c728bf941 205 compara[i]=buf;
thiagohuang 0:fa7c728bf941 206 }
thiagohuang 0:fa7c728bf941 207
thiagohuang 1:fd613df5ffd3 208 // Compara o ID do cartão aproximado com o ID da memória
thiagohuang 1:fd613df5ffd3 209 if((compara[0] == *(idcartao)) &&
thiagohuang 1:fd613df5ffd3 210 (compara[1] == *(idcartao+1)) &&
thiagohuang 1:fd613df5ffd3 211 (compara[2] == *(idcartao+2)) &&
thiagohuang 1:fd613df5ffd3 212 (compara[3] == *(idcartao+3)))
thiagohuang 0:fa7c728bf941 213 return k+1;
thiagohuang 0:fa7c728bf941 214
thiagohuang 0:fa7c728bf941 215 }
thiagohuang 0:fa7c728bf941 216 return 0;
thiagohuang 0:fa7c728bf941 217
thiagohuang 0:fa7c728bf941 218 }
thiagohuang 0:fa7c728bf941 219
thiagohuang 1:fd613df5ffd3 220 /* Função "printa_id" printa o ID passado por referência */
thiagohuang 0:fa7c728bf941 221 void printa_id (char *id){
thiagohuang 0:fa7c728bf941 222
thiagohuang 0:fa7c728bf941 223 int i;
thiagohuang 0:fa7c728bf941 224
thiagohuang 0:fa7c728bf941 225 for (i=0; i<4 ; i++){
thiagohuang 0:fa7c728bf941 226 printf("%d ",*(id+i));
thiagohuang 0:fa7c728bf941 227 }
thiagohuang 1:fd613df5ffd3 228 return;
thiagohuang 0:fa7c728bf941 229 }
thiagohuang 0:fa7c728bf941 230
thiagohuang 1:fd613df5ffd3 231 /* Função "colocamemoria" insere as informações do cartão
thiagohuang 1:fd613df5ffd3 232 aproximado (ID e senha inserida) na memória */
thiagohuang 0:fa7c728bf941 233 void colocamemoria(char *idcartao){
thiagohuang 0:fa7c728bf941 234
thiagohuang 0:fa7c728bf941 235 int8_t elementos,i,buf,senha;
thiagohuang 0:fa7c728bf941 236
thiagohuang 1:fd613df5ffd3 237 // Escreve na última posição da memória o ID do novo cartão cadastrado
thiagohuang 0:fa7c728bf941 238 for (i=0; i < 4; i++){
thiagohuang 0:fa7c728bf941 239 escreve_mem( *(idcartao+i), i);
thiagohuang 0:fa7c728bf941 240 }
thiagohuang 0:fa7c728bf941 241
thiagohuang 0:fa7c728bf941 242 printf("Digite a senha: ");
thiagohuang 0:fa7c728bf941 243 scanf("%d", &senha);
thiagohuang 0:fa7c728bf941 244 buf=senha;
thiagohuang 0:fa7c728bf941 245
thiagohuang 0:fa7c728bf941 246 i2c.read(0, elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 247 elementos++;
thiagohuang 1:fd613df5ffd3 248 i2c.write(5*elementos, buf); wait_ms(1); //Escreve a senha inserida pela usuário na memória
thiagohuang 0:fa7c728bf941 249
thiagohuang 0:fa7c728bf941 250 printf("\n\n\rCartao de ID ");
thiagohuang 0:fa7c728bf941 251 printa_id(idcartao);
thiagohuang 0:fa7c728bf941 252 printf("com SENHA %d cadastrado com sucesso.\n\r",senha);
thiagohuang 0:fa7c728bf941 253
thiagohuang 0:fa7c728bf941 254
thiagohuang 0:fa7c728bf941 255 i2c.write(0, elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 256
thiagohuang 0:fa7c728bf941 257 return;
thiagohuang 0:fa7c728bf941 258 }
thiagohuang 0:fa7c728bf941 259
thiagohuang 1:fd613df5ffd3 260 /* A função modo_cadastro faz o cadastro dos novos cartões solicitando que o usuário
thiagohuang 1:fd613df5ffd3 261 insera uma senha relacionado ao ID cadastrado */
thiagohuang 0:fa7c728bf941 262 void modo_cadastro (){
thiagohuang 0:fa7c728bf941 263
thiagohuang 0:fa7c728bf941 264 char id_cartao[4];
thiagohuang 0:fa7c728bf941 265 int8_t elementos;
thiagohuang 0:fa7c728bf941 266
thiagohuang 0:fa7c728bf941 267 i2c.read(0, elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 268 printf("\n\rMODO CADASTRO ATIVADO.\n\r");
thiagohuang 0:fa7c728bf941 269 printf("Aproxime Cartao do Leitor. \n\r");
thiagohuang 0:fa7c728bf941 270
thiagohuang 0:fa7c728bf941 271 pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
thiagohuang 1:fd613df5ffd3 272 // Trecho abaixo faz com que o modo seja trocado caso o usuário tenha solicitado um modo diferente
thiagohuang 0:fa7c728bf941 273 if(flag_mudamodo==1){
thiagohuang 0:fa7c728bf941 274 flag_mudamodo=0;
thiagohuang 0:fa7c728bf941 275 return;
thiagohuang 0:fa7c728bf941 276 }
thiagohuang 0:fa7c728bf941 277 wait_ms(10);
thiagohuang 0:fa7c728bf941 278
thiagohuang 1:fd613df5ffd3 279 if( jaexiste(id_cartao)!=0 ){ // Caso o cartão já esteja cadastrado
thiagohuang 0:fa7c728bf941 280 printf("O cartao de ID ");
thiagohuang 0:fa7c728bf941 281 printa_id(id_cartao);
thiagohuang 0:fa7c728bf941 282 printf("ja esta cadastrado.\n\r");
thiagohuang 0:fa7c728bf941 283 }
thiagohuang 1:fd613df5ffd3 284 else // Caso o cartão não esteja cadastrado
thiagohuang 1:fd613df5ffd3 285 colocamemoria(id_cartao); // Função "colocamemoria" cadastra o novo cartão
thiagohuang 0:fa7c728bf941 286
thiagohuang 0:fa7c728bf941 287 wait_ms(50);
thiagohuang 0:fa7c728bf941 288
thiagohuang 0:fa7c728bf941 289 return ;
thiagohuang 0:fa7c728bf941 290 }
thiagohuang 0:fa7c728bf941 291
thiagohuang 1:fd613df5ffd3 292 /* A função "modo_descadastro" pega o ID do cartão aproximado e descadastra
thiagohuang 1:fd613df5ffd3 293 caso o cartão seja encontrado na memória */
thiagohuang 0:fa7c728bf941 294 void modo_descadastro (){
thiagohuang 0:fa7c728bf941 295
thiagohuang 0:fa7c728bf941 296 char id_cartao[4],aux[5];
thiagohuang 0:fa7c728bf941 297 int8_t elementos,k,i,buf;
thiagohuang 0:fa7c728bf941 298
thiagohuang 1:fd613df5ffd3 299 i2c.read(0, elementos); wait_ms(1); // Variável "elementos" recebe a quantidade de cartões cadastrados
thiagohuang 0:fa7c728bf941 300
thiagohuang 0:fa7c728bf941 301 printf("\n\rMODO DESCADASTRO ATIVADO.\n\r");
thiagohuang 0:fa7c728bf941 302 printf("Aproxime Cartao do Leitor. \n\r");
thiagohuang 0:fa7c728bf941 303
thiagohuang 0:fa7c728bf941 304 pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
thiagohuang 1:fd613df5ffd3 305 // Trecho abaixo faz com que o modo seja trocado caso o usuário tenha solicitado um modo diferente
thiagohuang 0:fa7c728bf941 306 if(flag_mudamodo==1){
thiagohuang 0:fa7c728bf941 307 flag_mudamodo=0;
thiagohuang 0:fa7c728bf941 308 return;
thiagohuang 0:fa7c728bf941 309 }
thiagohuang 1:fd613df5ffd3 310
thiagohuang 0:fa7c728bf941 311 k=jaexiste(id_cartao);
thiagohuang 1:fd613df5ffd3 312 if( k!=0 ){ // Entra caso o ID do cartão aproximado seja encontrado na memória
thiagohuang 1:fd613df5ffd3 313 //Caso haja apenas um elemento, esse elemento é apagado e muda-se automaticamente para o Modo Cadastro
thiagohuang 1:fd613df5ffd3 314 if(elementos==1){
thiagohuang 0:fa7c728bf941 315 printf("Cartao de ID ");
thiagohuang 0:fa7c728bf941 316 printa_id(id_cartao);
thiagohuang 0:fa7c728bf941 317 printf("descadastrado com sucesso.\n\r");
thiagohuang 0:fa7c728bf941 318 elementos--;
thiagohuang 0:fa7c728bf941 319 i2c.write(0,elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 320 printf("Nao Ha Cartao Cadastrado, Ativando Modo Cadastro...\n\r");
thiagohuang 0:fa7c728bf941 321 flag_identificacao=0;
thiagohuang 0:fa7c728bf941 322 flag_cadastro=1;
thiagohuang 0:fa7c728bf941 323 flag_descadastro=0;
thiagohuang 0:fa7c728bf941 324 return;
thiagohuang 0:fa7c728bf941 325 }
thiagohuang 1:fd613df5ffd3 326 /* Caso haja mais de um cartão cadastrado, copia-se o último elemento na string "aux"
thiagohuang 1:fd613df5ffd3 327 e coloca na posição do cartão encontrado */
thiagohuang 1:fd613df5ffd3 328 else{
thiagohuang 0:fa7c728bf941 329 for (i=0; i < 5; i++){
thiagohuang 0:fa7c728bf941 330 i2c.read(5*(elementos-1)+1+i, buf); wait_ms(1);
thiagohuang 0:fa7c728bf941 331 aux[i]=buf;
thiagohuang 0:fa7c728bf941 332 }
thiagohuang 0:fa7c728bf941 333 for (i=0; i < 5; i++){
thiagohuang 1:fd613df5ffd3 334 i2c.write(5*(k-1)+1+i, aux[i]); wait_ms(1); //Escreve na posição descadastrada o último elemento
thiagohuang 0:fa7c728bf941 335 }
thiagohuang 0:fa7c728bf941 336 printf("Elemento %d desregistrado com sucesso.\n\r",k);
thiagohuang 0:fa7c728bf941 337 elementos--;
thiagohuang 0:fa7c728bf941 338 i2c.write(0,elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 339 return;
thiagohuang 0:fa7c728bf941 340 }
thiagohuang 0:fa7c728bf941 341 }
thiagohuang 1:fd613df5ffd3 342 else{ //Entra se k=0 (quando não o cartão não é encontrado na memória)
thiagohuang 0:fa7c728bf941 343 printf("Cartao nao esta registrado.\n\r");
thiagohuang 0:fa7c728bf941 344 }
thiagohuang 0:fa7c728bf941 345
thiagohuang 0:fa7c728bf941 346
thiagohuang 0:fa7c728bf941 347 return ;
thiagohuang 0:fa7c728bf941 348 }
thiagohuang 0:fa7c728bf941 349
thiagohuang 1:fd613df5ffd3 350 /* A função "modo_identificacao" corresponde ao modo de leitura de cartões
thiagohuang 1:fd613df5ffd3 351 para permitir o acesso do usuario */
thiagohuang 0:fa7c728bf941 352 void modo_identificacao (){
thiagohuang 0:fa7c728bf941 353
thiagohuang 0:fa7c728bf941 354 int k;
thiagohuang 0:fa7c728bf941 355 char id_cartao[4];
thiagohuang 0:fa7c728bf941 356 int8_t elementos,senha,buf;
thiagohuang 0:fa7c728bf941 357
thiagohuang 1:fd613df5ffd3 358 i2c.read(0, elementos); wait_ms(1); // Coloca em "elementos" o numero de cartões cadastrados na memória
thiagohuang 0:fa7c728bf941 359 printf("\n\rMODO IDENTIFICACAO ATIVADO\n\r");
thiagohuang 0:fa7c728bf941 360 printf("Aproxime Cartao do Leitor. \n\r");
thiagohuang 0:fa7c728bf941 361
thiagohuang 0:fa7c728bf941 362 pega_id(id_cartao); // Detecta o ID do cartao aproximado e coloca no vetor id_cartao
thiagohuang 1:fd613df5ffd3 363 // Trecho abaixo faz com que o modo seja trocado caso o usuário tenha solicitado um modo diferente
thiagohuang 0:fa7c728bf941 364 if(flag_mudamodo==1){
thiagohuang 0:fa7c728bf941 365 flag_mudamodo=0;
thiagohuang 0:fa7c728bf941 366 return;
thiagohuang 0:fa7c728bf941 367 }
thiagohuang 1:fd613df5ffd3 368 /* 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 */
thiagohuang 1:fd613df5ffd3 369 k=jaexiste(id_cartao);
thiagohuang 1:fd613df5ffd3 370 if(k!=0){ // Entra caso o cartão seja encontrado na memória
thiagohuang 0:fa7c728bf941 371 printf("Digite a senha: \n\r");
thiagohuang 0:fa7c728bf941 372 scanf("%d",&senha);
thiagohuang 1:fd613df5ffd3 373 printf("Senha inserida: %d\n\r",senha);
thiagohuang 1:fd613df5ffd3 374 i2c.read(5*k, buf); wait_ms(1); //Variável "buf" recebe a senha cadastrada na memória
thiagohuang 1:fd613df5ffd3 375 //Comparações da senha digitada com a senha cadastrada
thiagohuang 1:fd613df5ffd3 376 if (senha==buf) printf("Senha Correta - Acesso Permitido.\n\r");
thiagohuang 0:fa7c728bf941 377 else printf("Senha Incorreta - Acesso Negado.\n\r");
thiagohuang 0:fa7c728bf941 378 }
thiagohuang 1:fd613df5ffd3 379 else //Entra caso k seja 0
thiagohuang 0:fa7c728bf941 380 printf("Cartao Nao Esta Cadastrado.\n\r\n\r");
thiagohuang 0:fa7c728bf941 381
thiagohuang 0:fa7c728bf941 382 return;
thiagohuang 0:fa7c728bf941 383
thiagohuang 0:fa7c728bf941 384 }
thiagohuang 0:fa7c728bf941 385
thiagohuang 1:fd613df5ffd3 386 // As 3 funções abaixo setam as flags necessárias para que a função correta
thiagohuang 1:fd613df5ffd3 387 // seja ativada quando a tecla correspondente é pressionada.
thiagohuang 1:fd613df5ffd3 388 // A condição no início muda "flag_mudamodo" para indicar que haverá
thiagohuang 1:fd613df5ffd3 389 // uma mudança no modo ativo do programa.
thiagohuang 0:fa7c728bf941 390 void isr1() {
thiagohuang 0:fa7c728bf941 391
thiagohuang 0:fa7c728bf941 392 if(flag_identificacao==0)
thiagohuang 0:fa7c728bf941 393 flag_mudamodo=1;
thiagohuang 0:fa7c728bf941 394
thiagohuang 0:fa7c728bf941 395 flag_identificacao=1;
thiagohuang 0:fa7c728bf941 396 flag_cadastro=0;
thiagohuang 0:fa7c728bf941 397 flag_descadastro=0;
thiagohuang 0:fa7c728bf941 398 }
thiagohuang 0:fa7c728bf941 399 void isr2() {
thiagohuang 0:fa7c728bf941 400
thiagohuang 0:fa7c728bf941 401 if(flag_descadastro==0)
thiagohuang 0:fa7c728bf941 402 flag_mudamodo=1;
thiagohuang 0:fa7c728bf941 403
thiagohuang 0:fa7c728bf941 404 flag_identificacao=0;
thiagohuang 0:fa7c728bf941 405 flag_cadastro=0;
thiagohuang 1:fd613df5ffd3 406 flag_descadastro=1;
thiagohuang 0:fa7c728bf941 407 }
thiagohuang 0:fa7c728bf941 408 void isr3() {
thiagohuang 0:fa7c728bf941 409
thiagohuang 0:fa7c728bf941 410 if(flag_cadastro==0)
thiagohuang 0:fa7c728bf941 411 flag_mudamodo=1;
thiagohuang 0:fa7c728bf941 412
thiagohuang 0:fa7c728bf941 413 flag_identificacao=0;
thiagohuang 0:fa7c728bf941 414 flag_cadastro=1;
thiagohuang 0:fa7c728bf941 415 flag_descadastro=0;
thiagohuang 0:fa7c728bf941 416 }
thiagohuang 0:fa7c728bf941 417
thiagohuang 0:fa7c728bf941 418
thiagohuang 0:fa7c728bf941 419 int main(void) {
thiagohuang 0:fa7c728bf941 420
thiagohuang 0:fa7c728bf941 421 int8_t elementos=0;
thiagohuang 0:fa7c728bf941 422
thiagohuang 0:fa7c728bf941 423 pc.baud(9600);
thiagohuang 0:fa7c728bf941 424 //debounce.start();
thiagohuang 0:fa7c728bf941 425
thiagohuang 0:fa7c728bf941 426
thiagohuang 0:fa7c728bf941 427 //Init. RC522 Chip
thiagohuang 0:fa7c728bf941 428 RfChip.PCD_Init();
thiagohuang 0:fa7c728bf941 429
thiagohuang 0:fa7c728bf941 430 //init LCD
thiagohuang 0:fa7c728bf941 431 init_LCD();
thiagohuang 0:fa7c728bf941 432
thiagohuang 0:fa7c728bf941 433 i2c.write(0, 0); wait_ms(1);//escreve 0 elementos na memoria
thiagohuang 0:fa7c728bf941 434
thiagohuang 0:fa7c728bf941 435 i2c.read(0,elementos); wait_ms(1);
thiagohuang 0:fa7c728bf941 436
thiagohuang 1:fd613df5ffd3 437 button1.rise(&isr1); // Ativa quando a tecla "*" é pressionada
thiagohuang 1:fd613df5ffd3 438 button2.fall(&isr2); // Ativa quando a tecla "0" é pressionada
thiagohuang 1:fd613df5ffd3 439 button3.fall(&isr3); // Ativa quando a tecla "#" é pressionada
thiagohuang 0:fa7c728bf941 440
thiagohuang 0:fa7c728bf941 441 while (true){
thiagohuang 0:fa7c728bf941 442
thiagohuang 1:fd613df5ffd3 443 if(flag_identificacao==1){ // Entra caso o botão correspondente seja pressionado
thiagohuang 1:fd613df5ffd3 444 limpa_lcd();
thiagohuang 0:fa7c728bf941 445 escreve_lcd ("IDENTICACAO");
thiagohuang 0:fa7c728bf941 446 pula_linha();
thiagohuang 0:fa7c728bf941 447 escreve_lcd ("PASSE CARTAO");
thiagohuang 1:fd613df5ffd3 448 modo_identificacao(); // Ativa o modo identificação
thiagohuang 0:fa7c728bf941 449 }
thiagohuang 1:fd613df5ffd3 450 if(flag_cadastro==1){ // Entra caso o botão correspondente seja pressionado
thiagohuang 0:fa7c728bf941 451 limpa_lcd();
thiagohuang 0:fa7c728bf941 452 escreve_lcd ("CADASTRO");
thiagohuang 0:fa7c728bf941 453 pula_linha();
thiagohuang 0:fa7c728bf941 454 escreve_lcd ("PASSE CARTAO");
thiagohuang 1:fd613df5ffd3 455 modo_cadastro(); // Ativa o modo cadastro
thiagohuang 0:fa7c728bf941 456 }
thiagohuang 1:fd613df5ffd3 457 if(flag_descadastro==1){ // Entra caso o botão correspondente seja pressionado
thiagohuang 0:fa7c728bf941 458 limpa_lcd();
thiagohuang 0:fa7c728bf941 459 escreve_lcd ("DESCADASTRO");
thiagohuang 0:fa7c728bf941 460 pula_linha();
thiagohuang 0:fa7c728bf941 461 escreve_lcd ("PASSE CARTAO");
thiagohuang 1:fd613df5ffd3 462 modo_descadastro(); // Ativa o modo descadastro
thiagohuang 0:fa7c728bf941 463 }
thiagohuang 0:fa7c728bf941 464
thiagohuang 0:fa7c728bf941 465 }
thiagohuang 0:fa7c728bf941 466
thiagohuang 0:fa7c728bf941 467 }