Comparador de targetas

Dependencies:   mbed

Committer:
jhonatanll
Date:
Tue Jun 04 11:21:09 2019 +0000
Revision:
0:7e562a9443f6
comparador NFC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jhonatanll 0:7e562a9443f6 1 //Test of cheap 13.56 Mhz RFID-RC522 module from eBay
jhonatanll 0:7e562a9443f6 2 //This code is based on Martin Olejar's MFRC522 library. Minimal changes
jhonatanll 0:7e562a9443f6 3 //Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too
jhonatanll 0:7e562a9443f6 4
jhonatanll 0:7e562a9443f6 5 //Connect as follows:
jhonatanll 0:7e562a9443f6 6 //RFID pins -> Nucleo header CN5 (Arduino-compatible header)
jhonatanll 0:7e562a9443f6 7 //----------------------------------------
jhonatanll 0:7e562a9443f6 8 //RFID IRQ=pin5 -> Not used. Leave open
jhonatanll 0:7e562a9443f6 9 //RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12
jhonatanll 0:7e562a9443f6 10 //RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11
jhonatanll 0:7e562a9443f6 11 //RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13
jhonatanll 0:7e562a9443f6 12 //RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10
jhonatanll 0:7e562a9443f6 13 //RFID RST=pin7 -> Nucleo =PA_9=D8
jhonatanll 0:7e562a9443f6 14 //3.3V and Gnd to the respective pins
jhonatanll 0:7e562a9443f6 15
jhonatanll 0:7e562a9443f6 16 #include "mbed.h"
jhonatanll 0:7e562a9443f6 17 #include "MFRC522.h"
jhonatanll 0:7e562a9443f6 18
jhonatanll 0:7e562a9443f6 19 // Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
jhonatanll 0:7e562a9443f6 20 #define MF_RESET D8
jhonatanll 0:7e562a9443f6 21
jhonatanll 0:7e562a9443f6 22 DigitalOut LedGreen(LED1);
jhonatanll 0:7e562a9443f6 23
jhonatanll 0:7e562a9443f6 24 //Serial connection to PC for output
jhonatanll 0:7e562a9443f6 25 Serial pc(SERIAL_TX, SERIAL_RX);
jhonatanll 0:7e562a9443f6 26
jhonatanll 0:7e562a9443f6 27 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
jhonatanll 0:7e562a9443f6 28
jhonatanll 0:7e562a9443f6 29 #define SIZE_UID 10
jhonatanll 0:7e562a9443f6 30 uint8_t tag1[SIZE_UID];
jhonatanll 0:7e562a9443f6 31 uint8_t tag2[SIZE_UID];
jhonatanll 0:7e562a9443f6 32 uint8_t tmp_tag[SIZE_UID];
jhonatanll 0:7e562a9443f6 33
jhonatanll 0:7e562a9443f6 34 char tag_tag = 0;
jhonatanll 0:7e562a9443f6 35 // si taga_tag =0 no hay almacenado tags , si tag >1 esta llena la memoria
jhonatanll 0:7e562a9443f6 36 // Init. RC522 Chip
jhonatanll 0:7e562a9443f6 37
jhonatanll 0:7e562a9443f6 38
jhonatanll 0:7e562a9443f6 39
jhonatanll 0:7e562a9443f6 40 void print_tag(uint8_t *tagt){
jhonatanll 0:7e562a9443f6 41
jhonatanll 0:7e562a9443f6 42 for (uint8_t i = 0; i <SIZE_UID; i++)
jhonatanll 0:7e562a9443f6 43 pc.printf(" %x",*(tagt+i));
jhonatanll 0:7e562a9443f6 44 pc.printf("\n");
jhonatanll 0:7e562a9443f6 45
jhonatanll 0:7e562a9443f6 46
jhonatanll 0:7e562a9443f6 47 }
jhonatanll 0:7e562a9443f6 48
jhonatanll 0:7e562a9443f6 49 void clear_tag(uint8_t *tagt){
jhonatanll 0:7e562a9443f6 50
jhonatanll 0:7e562a9443f6 51 for (uint8_t i = 0; i < SIZE_UID; i++)
jhonatanll 0:7e562a9443f6 52 *(tagt+i) = 0;
jhonatanll 0:7e562a9443f6 53
jhonatanll 0:7e562a9443f6 54 }
jhonatanll 0:7e562a9443f6 55
jhonatanll 0:7e562a9443f6 56 void set_uid1(uint8_t *tagt){
jhonatanll 0:7e562a9443f6 57
jhonatanll 0:7e562a9443f6 58 for (uint8_t i = 0; i < RfChip.uid.size; i++)
jhonatanll 0:7e562a9443f6 59 *(tagt+i) = RfChip.uid.uidByte[i];
jhonatanll 0:7e562a9443f6 60
jhonatanll 0:7e562a9443f6 61 }
jhonatanll 0:7e562a9443f6 62 int comparar_tags(uint8_t *tag1, uint8_t *tag2){
jhonatanll 0:7e562a9443f6 63
jhonatanll 0:7e562a9443f6 64 for (uint8_t i = 0; i < SIZE_UID; i++){
jhonatanll 0:7e562a9443f6 65 if (*(tag1+i) != *(tag2+i))
jhonatanll 0:7e562a9443f6 66 return 0;
jhonatanll 0:7e562a9443f6 67 }
jhonatanll 0:7e562a9443f6 68 return 1;
jhonatanll 0:7e562a9443f6 69
jhonatanll 0:7e562a9443f6 70 }
jhonatanll 0:7e562a9443f6 71
jhonatanll 0:7e562a9443f6 72 int read_tag(){
jhonatanll 0:7e562a9443f6 73 if ( RfChip.PICC_IsNewCardPresent()){
jhonatanll 0:7e562a9443f6 74 printf (" tag \n");
jhonatanll 0:7e562a9443f6 75 if ( RfChip.PICC_ReadCardSerial()){
jhonatanll 0:7e562a9443f6 76 set_uid1(tmp_tag);
jhonatanll 0:7e562a9443f6 77 return 1;
jhonatanll 0:7e562a9443f6 78 }
jhonatanll 0:7e562a9443f6 79 }
jhonatanll 0:7e562a9443f6 80 return 0;
jhonatanll 0:7e562a9443f6 81 }
jhonatanll 0:7e562a9443f6 82 void save_tag(){
jhonatanll 0:7e562a9443f6 83 printf("los actuales tag. \n");
jhonatanll 0:7e562a9443f6 84 printf("\ntagtmp: "); print_tag(tmp_tag);
jhonatanll 0:7e562a9443f6 85 printf("\ntag1: ");print_tag(tag1);
jhonatanll 0:7e562a9443f6 86 printf("\ntag2: ");print_tag(tag2);
jhonatanll 0:7e562a9443f6 87
jhonatanll 0:7e562a9443f6 88 if (read_tag()){
jhonatanll 0:7e562a9443f6 89 if (tag_tag==0){
jhonatanll 0:7e562a9443f6 90 set_uid1(tag1);
jhonatanll 0:7e562a9443f6 91 printf("tag1 guardado \n");
jhonatanll 0:7e562a9443f6 92 tag_tag++;
jhonatanll 0:7e562a9443f6 93 }else{
jhonatanll 0:7e562a9443f6 94 if (comparar_tags(tag1,tmp_tag)){
jhonatanll 0:7e562a9443f6 95 printf ("es el tag 1");
jhonatanll 0:7e562a9443f6 96 }else{
jhonatanll 0:7e562a9443f6 97 set_uid1(tag2);
jhonatanll 0:7e562a9443f6 98 printf("tag2 guardado \n");
jhonatanll 0:7e562a9443f6 99 tag_tag++;
jhonatanll 0:7e562a9443f6 100
jhonatanll 0:7e562a9443f6 101 }
jhonatanll 0:7e562a9443f6 102
jhonatanll 0:7e562a9443f6 103 }
jhonatanll 0:7e562a9443f6 104 }
jhonatanll 0:7e562a9443f6 105 else
jhonatanll 0:7e562a9443f6 106 printf ("debe ingresar tag \n");
jhonatanll 0:7e562a9443f6 107
jhonatanll 0:7e562a9443f6 108
jhonatanll 0:7e562a9443f6 109 }
jhonatanll 0:7e562a9443f6 110 int main(void) {
jhonatanll 0:7e562a9443f6 111 pc.baud(115200);
jhonatanll 0:7e562a9443f6 112 pc.printf("Configuracion Tarjetas \n");
jhonatanll 0:7e562a9443f6 113 pc.printf("Ingrese Tarjeta del Tecnico \n");
jhonatanll 0:7e562a9443f6 114
jhonatanll 0:7e562a9443f6 115 RfChip.PCD_Init();
jhonatanll 0:7e562a9443f6 116
jhonatanll 0:7e562a9443f6 117 while(1){
jhonatanll 0:7e562a9443f6 118 wait(1);
jhonatanll 0:7e562a9443f6 119 if (tag_tag<2){
jhonatanll 0:7e562a9443f6 120 save_tag();
jhonatanll 0:7e562a9443f6 121
jhonatanll 0:7e562a9443f6 122 }
jhonatanll 0:7e562a9443f6 123 else{
jhonatanll 0:7e562a9443f6 124 if (read_tag()){
jhonatanll 0:7e562a9443f6 125 if (comparar_tags(tag1,tmp_tag))
jhonatanll 0:7e562a9443f6 126 printf ("es el tag 1");
jhonatanll 0:7e562a9443f6 127 else if (comparar_tags(tag2,tmp_tag))
jhonatanll 0:7e562a9443f6 128 printf ("es el tag 2");
jhonatanll 0:7e562a9443f6 129 }
jhonatanll 0:7e562a9443f6 130 }
jhonatanll 0:7e562a9443f6 131 }
jhonatanll 0:7e562a9443f6 132
jhonatanll 0:7e562a9443f6 133
jhonatanll 0:7e562a9443f6 134
jhonatanll 0:7e562a9443f6 135 }
jhonatanll 0:7e562a9443f6 136
jhonatanll 0:7e562a9443f6 137 /*
jhonatanll 0:7e562a9443f6 138 int i =0;
jhonatanll 0:7e562a9443f6 139 int ia=0;
jhonatanll 0:7e562a9443f6 140 while (i<1 || ia<1) {
jhonatanll 0:7e562a9443f6 141
jhonatanll 0:7e562a9443f6 142 // printf("%i \n",i);
jhonatanll 0:7e562a9443f6 143 // printf("%i \n",ia);
jhonatanll 0:7e562a9443f6 144 // Look for new cards
jhonatanll 0:7e562a9443f6 145 if ( ! RfChip.PICC_IsNewCardPresent())
jhonatanll 0:7e562a9443f6 146 {
jhonatanll 0:7e562a9443f6 147 wait_ms(500);
jhonatanll 0:7e562a9443f6 148 continue;
jhonatanll 0:7e562a9443f6 149 }
jhonatanll 0:7e562a9443f6 150
jhonatanll 0:7e562a9443f6 151 // Select one of the cards
jhonatanll 0:7e562a9443f6 152 if ( ! RfChip.PICC_ReadCardSerial())
jhonatanll 0:7e562a9443f6 153 {
jhonatanll 0:7e562a9443f6 154 wait_ms(500);
jhonatanll 0:7e562a9443f6 155 continue;
jhonatanll 0:7e562a9443f6 156 }
jhonatanll 0:7e562a9443f6 157
jhonatanll 0:7e562a9443f6 158
jhonatanll 0:7e562a9443f6 159
jhonatanll 0:7e562a9443f6 160
jhonatanll 0:7e562a9443f6 161 if (tag_tag){
jhonatanll 0:7e562a9443f6 162 if (comp_tag(tag1)){
jhonatanll 0:7e562a9443f6 163 printf("Tarjeta Tecnico ya registrada \n ");
jhonatanll 0:7e562a9443f6 164 printf("Ingrese Tarjeta Operario \n ");
jhonatanll 0:7e562a9443f6 165 i++;
jhonatanll 0:7e562a9443f6 166 }
jhonatanll 0:7e562a9443f6 167 else{
jhonatanll 0:7e562a9443f6 168 if (comp_tag(tag2)){
jhonatanll 0:7e562a9443f6 169 printf("Tarjeta Operario ya registrada \n ");
jhonatanll 0:7e562a9443f6 170 ia++;
jhonatanll 0:7e562a9443f6 171 }
jhonatanll 0:7e562a9443f6 172 else{
jhonatanll 0:7e562a9443f6 173
jhonatanll 0:7e562a9443f6 174 printf("Nueva Tarjeta No: \n");
jhonatanll 0:7e562a9443f6 175 print_tag_uid();
jhonatanll 0:7e562a9443f6 176 set_uid1(tag2);
jhonatanll 0:7e562a9443f6 177 printf("Nueva Tarjeta de Operario Coonfigurada\n");
jhonatanll 0:7e562a9443f6 178 print_tag_uid();
jhonatanll 0:7e562a9443f6 179 }
jhonatanll 0:7e562a9443f6 180 }
jhonatanll 0:7e562a9443f6 181 }else{
jhonatanll 0:7e562a9443f6 182 set_uid1(tag1);
jhonatanll 0:7e562a9443f6 183 tag_tag=true;
jhonatanll 0:7e562a9443f6 184 printf("Tarjeta de Tecnigo Ingresada ; \n");
jhonatanll 0:7e562a9443f6 185 print_tag_uid();
jhonatanll 0:7e562a9443f6 186
jhonatanll 0:7e562a9443f6 187 }
jhonatanll 0:7e562a9443f6 188
jhonatanll 0:7e562a9443f6 189
jhonatanll 0:7e562a9443f6 190 // Print Card type
jhonatanll 0:7e562a9443f6 191 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
jhonatanll 0:7e562a9443f6 192 pc.printf("PICC Type: %s \n", RfChip.PICC_GetTypeName(piccType));
jhonatanll 0:7e562a9443f6 193 wait_ms(1000);
jhonatanll 0:7e562a9443f6 194
jhonatanll 0:7e562a9443f6 195
jhonatanll 0:7e562a9443f6 196 }
jhonatanll 0:7e562a9443f6 197
jhonatanll 0:7e562a9443f6 198
jhonatanll 0:7e562a9443f6 199 printf("Configuracion de Tarjetas finalizado \n");
jhonatanll 0:7e562a9443f6 200 // wait(2);
jhonatanll 0:7e562a9443f6 201 int o=0;
jhonatanll 0:7e562a9443f6 202 int t=0;
jhonatanll 0:7e562a9443f6 203 while(1){
jhonatanll 0:7e562a9443f6 204 if ( RfChip.PICC_IsNewCardPresent()) {
jhonatanll 0:7e562a9443f6 205
jhonatanll 0:7e562a9443f6 206
jhonatanll 0:7e562a9443f6 207 if (comp_tag(tag1)){
jhonatanll 0:7e562a9443f6 208 t=1;
jhonatanll 0:7e562a9443f6 209 o=0;
jhonatanll 0:7e562a9443f6 210
jhonatanll 0:7e562a9443f6 211
jhonatanll 0:7e562a9443f6 212 }
jhonatanll 0:7e562a9443f6 213
jhonatanll 0:7e562a9443f6 214 if (comp_tag(tag2)){
jhonatanll 0:7e562a9443f6 215 o=1;
jhonatanll 0:7e562a9443f6 216 t=0;
jhonatanll 0:7e562a9443f6 217
jhonatanll 0:7e562a9443f6 218
jhonatanll 0:7e562a9443f6 219 }
jhonatanll 0:7e562a9443f6 220
jhonatanll 0:7e562a9443f6 221 if(t==1){
jhonatanll 0:7e562a9443f6 222
jhonatanll 0:7e562a9443f6 223
jhonatanll 0:7e562a9443f6 224 printf("tecni\n");
jhonatanll 0:7e562a9443f6 225 }
jhonatanll 0:7e562a9443f6 226
jhonatanll 0:7e562a9443f6 227 if(o==1){
jhonatanll 0:7e562a9443f6 228 printf("ope \n");
jhonatanll 0:7e562a9443f6 229 }
jhonatanll 0:7e562a9443f6 230
jhonatanll 0:7e562a9443f6 231
jhonatanll 0:7e562a9443f6 232
jhonatanll 0:7e562a9443f6 233 }
jhonatanll 0:7e562a9443f6 234
jhonatanll 0:7e562a9443f6 235 }
jhonatanll 0:7e562a9443f6 236
jhonatanll 0:7e562a9443f6 237
jhonatanll 0:7e562a9443f6 238
jhonatanll 0:7e562a9443f6 239 }
jhonatanll 0:7e562a9443f6 240
jhonatanll 0:7e562a9443f6 241 */