final1

Dependencies:   MFRC522 mbed

Fork of Final by walter azevedo

Committer:
walterlma
Date:
Tue Jul 04 16:26:35 2017 +0000
Revision:
0:45fd5f651e03
final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
walterlma 0:45fd5f651e03 1 #include "mbed.h"
walterlma 0:45fd5f651e03 2 #include "eeprom.h"
walterlma 0:45fd5f651e03 3 #include "MFRC522.h"
walterlma 0:45fd5f651e03 4
walterlma 0:45fd5f651e03 5 //KL25Z Pins for MFRC522 SPI interface
walterlma 0:45fd5f651e03 6 #define SPI_MOSI PTC6
walterlma 0:45fd5f651e03 7 #define SPI_MISO PTC7
walterlma 0:45fd5f651e03 8 #define SPI_SCLK PTC5
walterlma 0:45fd5f651e03 9 #define SPI_CS PTC4
walterlma 0:45fd5f651e03 10 // KL25Z Pin for MFRC522 reset
walterlma 0:45fd5f651e03 11 #define MF_RESET PTC3
walterlma 0:45fd5f651e03 12
walterlma 0:45fd5f651e03 13 //Pinos EEPROM
walterlma 0:45fd5f651e03 14 #define SDA PTC2 // I2C SDA pin
walterlma 0:45fd5f651e03 15 #define SCL PTC1 // I2C SCL pin
walterlma 0:45fd5f651e03 16 #define EEPROM_CONTROL_BYTE 0xA0
walterlma 0:45fd5f651e03 17 #define I2C_READ 0x01
walterlma 0:45fd5f651e03 18
walterlma 0:45fd5f651e03 19 #define OFF 1
walterlma 0:45fd5f651e03 20 #define ON 0
walterlma 0:45fd5f651e03 21
walterlma 0:45fd5f651e03 22 DigitalOut LedRed (LED_RED);
walterlma 0:45fd5f651e03 23 DigitalOut LedGreen (LED_GREEN);
walterlma 0:45fd5f651e03 24
walterlma 0:45fd5f651e03 25 EEPROM i2c(SDA, SCL, 0, EEPROM::T24C16); // T24C01 should work for the 24AA02E48 eeprom
walterlma 0:45fd5f651e03 26 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET);
walterlma 0:45fd5f651e03 27
walterlma 0:45fd5f651e03 28 //I2C i2c(PTE0, PTE1); // sda, scl on KL25Z
walterlma 0:45fd5f651e03 29 Serial pc(USBTX, USBRX); // tx, rx
walterlma 0:45fd5f651e03 30
walterlma 0:45fd5f651e03 31 void escreve_mem(int8_t dado, uint8_t i){
walterlma 0:45fd5f651e03 32 int8_t buf, elementos;
walterlma 0:45fd5f651e03 33
walterlma 0:45fd5f651e03 34 LedGreen = 0;
walterlma 0:45fd5f651e03 35 i2c.read(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 36 buf=dado;
walterlma 0:45fd5f651e03 37 i2c.write(5*elementos+1+i, buf); wait_ms(1);//escreve na memoria
walterlma 0:45fd5f651e03 38 }
walterlma 0:45fd5f651e03 39
walterlma 0:45fd5f651e03 40 /*char read_mem(uint8_t elemento, uint8_t i){
walterlma 0:45fd5f651e03 41 char x;
walterlma 0:45fd5f651e03 42 uint8_t buf, elementos;
walterlma 0:45fd5f651e03 43
walterlma 0:45fd5f651e03 44 i2c.read(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 45 if (elementos < elemento){
walterlma 0:45fd5f651e03 46 printf("não há numero de elementos na memória");
walterlma 0:45fd5f651e03 47 return=-1;
walterlma 0:45fd5f651e03 48 }else{
walterlma 0:45fd5f651e03 49 i2c.read(5*(elemento-1)+1+i, buf); wait_ms(1);
walterlma 0:45fd5f651e03 50 x=buf;
walterlma 0:45fd5f651e03 51 return x;
walterlma 0:45fd5f651e03 52 }
walterlma 0:45fd5f651e03 53 }*/
walterlma 0:45fd5f651e03 54
walterlma 0:45fd5f651e03 55 /*int varre_mem( uint8_t *s){
walterlma 0:45fd5f651e03 56 int8_t elementos=0;
walterlma 0:45fd5f651e03 57 uint8_t i = 0,buf;
walterlma 0:45fd5f651e03 58 uint8_t *compara;
walterlma 0:45fd5f651e03 59 int k;
walterlma 0:45fd5f651e03 60
walterlma 0:45fd5f651e03 61 i2c.read(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 62 for (k=0;k==elementos;k++){
walterlma 0:45fd5f651e03 63 for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 64 i2c.read(5*(elementos-1)+1+i, buf); wait_ms(1);
walterlma 0:45fd5f651e03 65 compara[i]=buf;
walterlma 0:45fd5f651e03 66 }
walterlma 0:45fd5f651e03 67 if (compara==s) return 0; //retorna zero se encontrar id ja registrado
walterlma 0:45fd5f651e03 68 }
walterlma 0:45fd5f651e03 69
walterlma 0:45fd5f651e03 70 return 1; //retorna 1 se nao encontrar id igual
walterlma 0:45fd5f651e03 71 }*/
walterlma 0:45fd5f651e03 72
walterlma 0:45fd5f651e03 73 int main(void) {
walterlma 0:45fd5f651e03 74 int encontrou=0;
walterlma 0:45fd5f651e03 75 int t,jafalou=0,flag_registro=1, flag_identificacao=0, senha;
walterlma 0:45fd5f651e03 76 char idcartao[4],compara[4];//vetor que grava id do cartao
walterlma 0:45fd5f651e03 77 char x;
walterlma 0:45fd5f651e03 78 int8_t buf=0, elementos,elemento,buf1;
walterlma 0:45fd5f651e03 79 uint8_t i = 0,k;
walterlma 0:45fd5f651e03 80
walterlma 0:45fd5f651e03 81 pc.baud(9600);
walterlma 0:45fd5f651e03 82
walterlma 0:45fd5f651e03 83 // Init. RC522 Chip
walterlma 0:45fd5f651e03 84 RfChip.PCD_Init();
walterlma 0:45fd5f651e03 85
walterlma 0:45fd5f651e03 86 i2c.write(0, 0); wait_ms(1);//escreve 0 elementos na memoria
walterlma 0:45fd5f651e03 87
walterlma 0:45fd5f651e03 88 while (true){
walterlma 0:45fd5f651e03 89 i2c.read(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 90
walterlma 0:45fd5f651e03 91 if(elementos==0 && jafalou==0){
walterlma 0:45fd5f651e03 92 printf("Nenhum cartao registrado!\n\r");
walterlma 0:45fd5f651e03 93 printf("Favor aproximar os cartoes a serem registrados\n\r");
walterlma 0:45fd5f651e03 94 jafalou=1;
walterlma 0:45fd5f651e03 95 }
walterlma 0:45fd5f651e03 96 inicio:
walterlma 0:45fd5f651e03 97 LedGreen = 1;
walterlma 0:45fd5f651e03 98 // Look for new cards
walterlma 0:45fd5f651e03 99 if ( ! RfChip.PICC_IsNewCardPresent())
walterlma 0:45fd5f651e03 100 {
walterlma 0:45fd5f651e03 101 wait_ms(500);
walterlma 0:45fd5f651e03 102 continue;
walterlma 0:45fd5f651e03 103 }
walterlma 0:45fd5f651e03 104
walterlma 0:45fd5f651e03 105 // Select one of the cards
walterlma 0:45fd5f651e03 106 if ( ! RfChip.PICC_ReadCardSerial())
walterlma 0:45fd5f651e03 107 {
walterlma 0:45fd5f651e03 108 wait_ms(500);
walterlma 0:45fd5f651e03 109 continue;
walterlma 0:45fd5f651e03 110 }
walterlma 0:45fd5f651e03 111 if(flag_registro==1){
walterlma 0:45fd5f651e03 112 //verifica se cartao ja foi registrado
walterlma 0:45fd5f651e03 113 if (elementos != 0){
walterlma 0:45fd5f651e03 114 for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 115 buf=RfChip.uid.uidByte[i];
walterlma 0:45fd5f651e03 116 idcartao[i]=buf;
walterlma 0:45fd5f651e03 117 }
walterlma 0:45fd5f651e03 118 i2c.read(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 119 for (k=0;k<elementos;k++){
walterlma 0:45fd5f651e03 120 for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 121 i2c.read(5*(elementos-1)+1+i, buf); wait_ms(1);
walterlma 0:45fd5f651e03 122 compara[i]=buf;
walterlma 0:45fd5f651e03 123 }
walterlma 0:45fd5f651e03 124 if ((compara[0] == idcartao[0]) &&
walterlma 0:45fd5f651e03 125 (compara[1] == idcartao[1]) &&
walterlma 0:45fd5f651e03 126 (compara[2] == idcartao[2]) &&
walterlma 0:45fd5f651e03 127 (compara[3] == idcartao[3])){
walterlma 0:45fd5f651e03 128 printf("cartao ja registrado\n\r");
walterlma 0:45fd5f651e03 129 goto inicio;
walterlma 0:45fd5f651e03 130 }
walterlma 0:45fd5f651e03 131 }
walterlma 0:45fd5f651e03 132 }
walterlma 0:45fd5f651e03 133
walterlma 0:45fd5f651e03 134 //escrita na memoria
walterlma 0:45fd5f651e03 135 printf("\n\r");
walterlma 0:45fd5f651e03 136 //if(flag_registro==1){
walterlma 0:45fd5f651e03 137 for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 138 escreve_mem(RfChip.uid.uidByte[i], i);
walterlma 0:45fd5f651e03 139 }
walterlma 0:45fd5f651e03 140 elementos++;
walterlma 0:45fd5f651e03 141 i2c.write(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 142 i2c.read(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 143 printf("\n\r");
walterlma 0:45fd5f651e03 144 printf("elementos: %d\n\r", elementos);
walterlma 0:45fd5f651e03 145 //}
walterlma 0:45fd5f651e03 146 //le o que esta na memoria
walterlma 0:45fd5f651e03 147 printf("memoria: ");
walterlma 0:45fd5f651e03 148 //elemento=2;
walterlma 0:45fd5f651e03 149 //if (elemento<elementos){
walterlma 0:45fd5f651e03 150 // printf("nao exite esse numero de elementos na memoria");
walterlma 0:45fd5f651e03 151 //}else {
walterlma 0:45fd5f651e03 152 for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 153 i2c.read(5*(elementos-1)+1+i, buf); wait_ms(1);
walterlma 0:45fd5f651e03 154 x=buf;
walterlma 0:45fd5f651e03 155 printf(" %d", x);
walterlma 0:45fd5f651e03 156 }
walterlma 0:45fd5f651e03 157 //}
walterlma 0:45fd5f651e03 158
walterlma 0:45fd5f651e03 159 /*for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 160 idcartao[i]=read_mem(elemento, i);
walterlma 0:45fd5f651e03 161 }
walterlma 0:45fd5f651e03 162 for (i=0;i<4;i++){
walterlma 0:45fd5f651e03 163 printf(" %d", idcartao[i]);
walterlma 0:45fd5f651e03 164 }*/
walterlma 0:45fd5f651e03 165 printf("\n\r");
walterlma 0:45fd5f651e03 166 printf("\n\r");
walterlma 0:45fd5f651e03 167 wait_ms(200);
walterlma 0:45fd5f651e03 168
walterlma 0:45fd5f651e03 169 printf("Senha:");
walterlma 0:45fd5f651e03 170 scanf("%d", &senha);
walterlma 0:45fd5f651e03 171 printf("senha %d\n\r", senha);
walterlma 0:45fd5f651e03 172 buf=senha;
walterlma 0:45fd5f651e03 173 i2c.write(5*elementos, buf); wait_ms(1);
walterlma 0:45fd5f651e03 174
walterlma 0:45fd5f651e03 175 printf("Deseja continuar a registrar cartoes?\n\r");
walterlma 0:45fd5f651e03 176 printf("1:Sim 2:Nao\n\r");
walterlma 0:45fd5f651e03 177 scanf("%d", &t); //le botao se 1 goto comeco e anda pos na memoria se 2 continua
walterlma 0:45fd5f651e03 178 printf("\n\r");
walterlma 0:45fd5f651e03 179 if (t==1)goto inicio;
walterlma 0:45fd5f651e03 180 if (t==2){
walterlma 0:45fd5f651e03 181 printf("Fim registros!\n\r");
walterlma 0:45fd5f651e03 182 flag_registro=0;
walterlma 0:45fd5f651e03 183 }
walterlma 0:45fd5f651e03 184 }
walterlma 0:45fd5f651e03 185 else{
walterlma 0:45fd5f651e03 186 printf("Passe cartao para obter acesso\n\r");
walterlma 0:45fd5f651e03 187 for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 188 buf=RfChip.uid.uidByte[i];
walterlma 0:45fd5f651e03 189 idcartao[i]=buf;
walterlma 0:45fd5f651e03 190 }
walterlma 0:45fd5f651e03 191 i2c.read(0, elementos); wait_ms(1);
walterlma 0:45fd5f651e03 192 for (k=0;k<elementos;k++){
walterlma 0:45fd5f651e03 193 for (i=0; i < RfChip.uid.size; i++){
walterlma 0:45fd5f651e03 194 i2c.read(5*(elementos-1)+1+i, buf); wait_ms(1);
walterlma 0:45fd5f651e03 195 compara[i]=buf;
walterlma 0:45fd5f651e03 196 }
walterlma 0:45fd5f651e03 197 if ((compara[0] == idcartao[0]) &&
walterlma 0:45fd5f651e03 198 (compara[1] == idcartao[1]) &&
walterlma 0:45fd5f651e03 199 (compara[2] == idcartao[2]) &&
walterlma 0:45fd5f651e03 200 (compara[3] == idcartao[3])){
walterlma 0:45fd5f651e03 201 printf("cartao encontrado!\n\r");
walterlma 0:45fd5f651e03 202 printf("Digite a senha\n\r");
walterlma 0:45fd5f651e03 203 scanf("%d", &senha);
walterlma 0:45fd5f651e03 204 printf("senha %d\n\r", senha);
walterlma 0:45fd5f651e03 205 buf1=senha;
walterlma 0:45fd5f651e03 206 encontrou=1;
walterlma 0:45fd5f651e03 207 }
walterlma 0:45fd5f651e03 208 }
walterlma 0:45fd5f651e03 209 if(encontrou==1){
walterlma 0:45fd5f651e03 210 encontrou=0;
walterlma 0:45fd5f651e03 211 i2c.read(5*elementos, buf); wait_ms(1);
walterlma 0:45fd5f651e03 212 if (buf1==buf){
walterlma 0:45fd5f651e03 213 printf("acesso permitido\n\r");
walterlma 0:45fd5f651e03 214 goto inicio;
walterlma 0:45fd5f651e03 215 }else {
walterlma 0:45fd5f651e03 216 printf("acesso negado\n\r");
walterlma 0:45fd5f651e03 217 goto inicio;
walterlma 0:45fd5f651e03 218 }
walterlma 0:45fd5f651e03 219 }
walterlma 0:45fd5f651e03 220 }
walterlma 0:45fd5f651e03 221 }
walterlma 0:45fd5f651e03 222 }