PROGRAMA COMPLETO

Dependencies:   PN532_MK20 USBDevice mbed

Committer:
mauroar211
Date:
Fri Apr 24 20:44:50 2015 +0000
Revision:
3:74dccd92e7f2
Parent:
2:e2d9212cbca3
PROGRAMA COMPLETO:; leer; escribir; emular

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mauroar211 0:4075acb88627 1 /*
mauroar211 0:4075acb88627 2 --------------------------------------------------------------
mauroar211 0:4075acb88627 3 ---- DECLARACIONES DE LIBRERIAS
mauroar211 0:4075acb88627 4 --------------------------------------------------------------
mauroar211 0:4075acb88627 5 */
mauroar211 0:4075acb88627 6 #include "mbed.h"
mauroar211 0:4075acb88627 7 #include "PN532_SPI.h"
mauroar211 0:4075acb88627 8 #include "NfcAdapter.h"
mauroar211 0:4075acb88627 9 #include "PN532.h"
mauroar211 0:4075acb88627 10 #include "USBSerial.h"
mauroar211 0:4075acb88627 11 #include "UtilidadesNFC.h"
mauroar211 2:e2d9212cbca3 12 #include "snep.h"
mauroar211 2:e2d9212cbca3 13 #include "NdefMessage.h"
mauroar211 0:4075acb88627 14
mauroar211 0:4075acb88627 15 /*
mauroar211 0:4075acb88627 16 --------------------------------------------------------------
mauroar211 0:4075acb88627 17 ---- DECLARACIONES DE EXTERNAS
mauroar211 0:4075acb88627 18 --------------------------------------------------------------
mauroar211 0:4075acb88627 19 */
mauroar211 0:4075acb88627 20 extern USBSerial usb;
mauroar211 0:4075acb88627 21 extern DigitalOut red;
mauroar211 0:4075acb88627 22 extern DigitalOut green;
mauroar211 0:4075acb88627 23 extern DigitalOut blue;
mauroar211 2:e2d9212cbca3 24 extern uint8_t ndefBuf[128];
mauroar211 2:e2d9212cbca3 25 extern char buffertexto[15];
mauroar211 0:4075acb88627 26
mauroar211 0:4075acb88627 27 /*
mauroar211 0:4075acb88627 28 --------------------------------------------------------------
mauroar211 0:4075acb88627 29 ---- FUNCIONES
mauroar211 0:4075acb88627 30 --------------------------------------------------------------
mauroar211 0:4075acb88627 31 */
mauroar211 0:4075acb88627 32
mauroar211 0:4075acb88627 33 //Funcion para Inicializar el Chip NFC PN532
mauroar211 0:4075acb88627 34 NfcAdapter inicializarlector()
mauroar211 0:4075acb88627 35 {
mauroar211 0:4075acb88627 36 //Se inicializa el modulo de comunicacion SPI en los pines D11 (MOSI), D12 (MISO) y D13(CLK)
mauroar211 0:4075acb88627 37 SPI spi(D11, D12, D13);
mauroar211 0:4075acb88627 38 //se selecciona el pin SS (slave selector)
mauroar211 0:4075acb88627 39 PN532_SPI pn532spi(spi, D10);
mauroar211 0:4075acb88627 40 //envia comandos para inicializar comunicacion con el chip
mauroar211 0:4075acb88627 41 NfcAdapter nfc(pn532spi);
mauroar211 0:4075acb88627 42 //configura el chip en modo lectura escritura
mauroar211 0:4075acb88627 43 nfc.begin();
mauroar211 0:4075acb88627 44 return nfc;
mauroar211 0:4075acb88627 45 };
mauroar211 0:4075acb88627 46
mauroar211 0:4075acb88627 47
mauroar211 0:4075acb88627 48 //Funcion para identificar si hay un TAG en el modulo, obtener su ID y leer mensajes en memoria
mauroar211 0:4075acb88627 49 int LeerTagNFC(){
mauroar211 0:4075acb88627 50
mauroar211 0:4075acb88627 51 //FUNCION PARA CONFIGURAR EL MODULO NFC
mauroar211 0:4075acb88627 52 NfcAdapter nfc = inicializarlector();
mauroar211 0:4075acb88627 53
mauroar211 0:4075acb88627 54 while (1) {
mauroar211 0:4075acb88627 55
mauroar211 0:4075acb88627 56 usb.printf("\r buscando Tag NFC\n\r");
mauroar211 0:4075acb88627 57
mauroar211 0:4075acb88627 58
mauroar211 0:4075acb88627 59 if (nfc.tagPresent()) { //ESCANEA HASTA ENCONTRAR UN TAG
mauroar211 0:4075acb88627 60 usb.printf("\r Tag encontrado \n\r");
mauroar211 0:4075acb88627 61 unsigned int type1 = nfc.guessTagType(); //OBTIENE EL TIPO DE TAG
mauroar211 0:4075acb88627 62 NfcTag tag = nfc.read(); //LEE EL TAG
mauroar211 0:4075acb88627 63 if (type1 == TAG_TYPE_MIFARE_CLASSIC){
mauroar211 0:4075acb88627 64 red = 0;
mauroar211 0:4075acb88627 65 blue = 0;
mauroar211 0:4075acb88627 66 wait(0.5);
mauroar211 0:4075acb88627 67 }
mauroar211 0:4075acb88627 68
mauroar211 0:4075acb88627 69 string id = tag.getUidString(); //OBTIENE EL ID DEL TAG
mauroar211 0:4075acb88627 70
mauroar211 0:4075acb88627 71 usb.printf("|id: %s|\n\r", id);
mauroar211 0:4075acb88627 72
mauroar211 0:4075acb88627 73 if (tag.hasNdefMessage()) { //INDICA SI EL TAG TIENE UN MENSAJE EN SU MEMORIA
mauroar211 0:4075acb88627 74 NdefMessage mensaje = tag.getNdefMessage();//OBTIENE EL MENSAJE DENTRO DEL TAG
mauroar211 0:4075acb88627 75 usb.printf("|Mensaje: %s|\n\r", mensaje);
mauroar211 0:4075acb88627 76 }
mauroar211 0:4075acb88627 77 return 1;
mauroar211 0:4075acb88627 78 }
mauroar211 0:4075acb88627 79 wait(1);
mauroar211 0:4075acb88627 80 }
mauroar211 0:4075acb88627 81 }
mauroar211 0:4075acb88627 82
mauroar211 0:4075acb88627 83
mauroar211 0:4075acb88627 84 int escribirTagNFC(){
mauroar211 3:74dccd92e7f2 85 //Se inicializa el modulo de comunicacion SPI en los pines D11 (MOSI), D12 (MISO) y D13(CLK)
mauroar211 3:74dccd92e7f2 86 SPI spi(D11, D12, D13);
mauroar211 3:74dccd92e7f2 87 //se selecciona el pin SS (slave selector)
mauroar211 3:74dccd92e7f2 88 PN532_SPI pn532spi(spi, D10);
mauroar211 3:74dccd92e7f2 89 //envia comandos para inicializar comunicacion con el chip
mauroar211 3:74dccd92e7f2 90 NfcAdapter nfc(pn532spi);
mauroar211 3:74dccd92e7f2 91 //configura el chip en modo lectura escritura
mauroar211 3:74dccd92e7f2 92 nfc.begin();
mauroar211 0:4075acb88627 93
mauroar211 0:4075acb88627 94 while (1) {
mauroar211 0:4075acb88627 95 usb.printf("\r Coloque una etiqueta Mifare Classic NFC formateada en el lector \n\r");
mauroar211 0:4075acb88627 96 if (nfc.tagPresent()) {
mauroar211 0:4075acb88627 97 usb.printf("\r entre \r\n");
mauroar211 0:4075acb88627 98 NdefMessage message = NdefMessage();
mauroar211 3:74dccd92e7f2 99 message.addTextRecord(buffertexto);
mauroar211 0:4075acb88627 100 // message.addUriRecord("");
mauroar211 0:4075acb88627 101 bool success = nfc.write(message);
mauroar211 0:4075acb88627 102 if (success) {
mauroar211 0:4075acb88627 103 usb.printf("\r Trate de leer esta etiqueta con su telefono \n\r");
mauroar211 0:4075acb88627 104 green = 0;
mauroar211 0:4075acb88627 105 blue = 0;
mauroar211 0:4075acb88627 106 return 1;
mauroar211 0:4075acb88627 107 }
mauroar211 0:4075acb88627 108 else {
mauroar211 0:4075acb88627 109 usb.printf("\r no se escribio \n\r");
mauroar211 0:4075acb88627 110 }
mauroar211 0:4075acb88627 111
mauroar211 0:4075acb88627 112 }
mauroar211 0:4075acb88627 113 wait(2);
mauroar211 0:4075acb88627 114 }
mauroar211 0:4075acb88627 115
mauroar211 2:e2d9212cbca3 116 }
mauroar211 2:e2d9212cbca3 117
mauroar211 2:e2d9212cbca3 118 int emularTagNFC(){
mauroar211 2:e2d9212cbca3 119
mauroar211 2:e2d9212cbca3 120 uint8_t ndefBuf[128]; //EL MENSAJE NO PUEDE SUPERAR LOS 128 CARACTERES.
mauroar211 2:e2d9212cbca3 121 //Se inicializa el modulo de comunicacion SPI en los pines D11 (MOSI), D12 (MISO) y D13(CLK)
mauroar211 2:e2d9212cbca3 122 SPI spi(D11, D12, D13);
mauroar211 2:e2d9212cbca3 123 //se selecciona el pin SS (slave selector)
mauroar211 2:e2d9212cbca3 124 PN532_SPI pn532spi(spi, D10);
mauroar211 2:e2d9212cbca3 125 //configura el chip en modo emulacion de tarjeta
mauroar211 2:e2d9212cbca3 126 SNEP nfc(pn532spi);
mauroar211 2:e2d9212cbca3 127
mauroar211 2:e2d9212cbca3 128 //uint8_t ndefBuf[128]; //EL MENSAJE NO PUEDE SUPERAR LOS 128 CARACTERES.
mauroar211 2:e2d9212cbca3 129
mauroar211 2:e2d9212cbca3 130 while (1) {
mauroar211 2:e2d9212cbca3 131 usb.printf("\r ENVIANDO MENSAJE - \n\r ");
mauroar211 2:e2d9212cbca3 132 NdefMessage message = NdefMessage();
mauroar211 2:e2d9212cbca3 133 message.addTextRecord(buffertexto);//COMANDO UTILIZADO PARA ENVIAR TEXTO PLANO
mauroar211 2:e2d9212cbca3 134 //message.addUriRecord("http://www.pizzaspiccolo.com.co/");//COMANDO UTILIZADO PARA ENVIAR UNA URL
mauroar211 2:e2d9212cbca3 135 int messageSize = message.getEncodedSize();//OBTIENE EL TAMAÑO TOTAL DEL MENSAJE (ENCABEZADO + TEXTO)
mauroar211 2:e2d9212cbca3 136 if (messageSize > sizeof(ndefBuf)) {
mauroar211 2:e2d9212cbca3 137 usb.printf("EL MENSAJE ES DEMASIADO GRANDE\r\n");
mauroar211 2:e2d9212cbca3 138
mauroar211 2:e2d9212cbca3 139 }
mauroar211 2:e2d9212cbca3 140 message.encode(ndefBuf);//ENCAPSULA EL ENCABEZADO Y EL MENSAJE EN EL BUFFER
mauroar211 2:e2d9212cbca3 141 if (0 >= nfc.write(ndefBuf, messageSize)) {//ESCRIBE EL MENSAJE EN UN DISPOSITIVO MOVIL COMPATIBLE
mauroar211 2:e2d9212cbca3 142 usb.printf("FALLO\r\n");
mauroar211 2:e2d9212cbca3 143 } else {
mauroar211 2:e2d9212cbca3 144 usb.printf("MENSAJE ENVIADO\r\n");
mauroar211 2:e2d9212cbca3 145 return 1;
mauroar211 2:e2d9212cbca3 146 }
mauroar211 2:e2d9212cbca3 147
mauroar211 2:e2d9212cbca3 148 wait(1);
mauroar211 2:e2d9212cbca3 149 }
mauroar211 2:e2d9212cbca3 150
mauroar211 2:e2d9212cbca3 151 }