jhonatan llanten
/
nfc_targetas_almacenada
Comparador de targetas
main.cpp@0:7e562a9443f6, 2019-06-04 (annotated)
- Committer:
- jhonatanll
- Date:
- Tue Jun 04 11:21:09 2019 +0000
- Revision:
- 0:7e562a9443f6
comparador NFC
Who changed what in which revision?
User | Revision | Line number | New 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 | */ |