//Programa LeerBloque2 (Depurado algunas lineas respecto a version 1) //Leer bloque elegido //Adaptado Prof: Bolaños 2018 - Ensayado //EJEMPLO BLOQUE 54 se grabo en tarjetas ensayadas el texto Profesor Bolanos #include #include #define RST_PIN 9 // Configurable, see typical pin layout above #define SS_PIN 10 // Configurable, see typical pin layout above //Variables globales---------------------------- int num=999;// Variable para ingresar numero de bloque a leer //-----------Fin variables globales------------- MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance //----------------------------------------- void(* resetFunc) (void) = 0; // esta es la funcion de reset //----------------------------------------- void setup() { delay(3000); Serial.begin(9600); // Initialize serial communications with the PC //**********Ingresar numero de bloque******************************* //Se va a pedir ingresar el numero de bloque para escribir---- Serial.println("Coloque tarjeta en lector para leer...(3seg)"); Serial.println("*********************************************"); Serial.println("Ingrese bloque a leer...(3seg)"); delay(3000);//Da un tiempo para que usuario ingrese numero de bloque /* * Evaluamos el momento en el cual recibimos un caracter * a través del puerto serie */ if (Serial.available()>0) { //A continuacion acciones realizadas solo desde PC-- //Delay para favorecer la lectura de caracteres delay(200); //Se crea una variable que servirá como buffer String bufferString = ""; /* * Se le indica a Arduino que mientras haya datos * disponibles para ser leídos en el puerto serie * se mantenga concatenando los caracteres en la * variable bufferString */ while (Serial.available()>0) { bufferString += (char)Serial.read(); } num = bufferString.toInt(); //Analiza si no se ingreso nada---- if (num==999) { Serial.println("No se eligio bloque valido.... Espere.."); Serial.println("+++++++++++++++++++++++++++++++++++++++++++++"); delay(2000); Serial.println(); resetFunc(); // llamo funcion especifica de reseteo } Serial.print("Numero de bloque a LEER -->"); Serial.print(num); Serial.println(" ------------------Aceptado"); } Serial.println("****----------------------------****"); delay(3000); //**********FIN Ingresar numero de bloque*************** SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card } void loop() { // Prepare key - all keys are set to FFFFFFFFFFFFh at chip delivery from the factory. MFRC522::MIFARE_Key key; for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; // Look for new cards if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Select one of the cards if ( ! mfrc522.PICC_ReadCardSerial()) return; Serial.print(F("Num. de Serie unico:")); //Dump UID for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.print(F(" PICC type: ")); // Dump PICC type MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); byte buffer[34]; byte block; MFRC522::StatusCode status; byte len; block = num; //Se especifica en que bloque se leera_____------______-----______ Serial.println(F("Authenticating using key A...")); status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid)); if (status != MFRC522::STATUS_OK) { Serial.print(F("PCD_Authenticate() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); Serial.println("Re Iniciando..."); Serial.println("+++++++++++++++++++++++++++++++++++++++++++++"); delay(2000); resetFunc(); // reseteo el Arduino return; } Serial.println(" "); //Se leera el bloque elegido //---------------leo el bloque num----------- byte blockAddr = num; //Se especifica que bloque se leera _____------______-----______ buffer[18]; byte size = sizeof(buffer); Serial.println(); // Read data from the block Serial.print(F("Cargando dato del bloque ")); Serial.print(blockAddr); Serial.println(F(" ...")); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Read() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); Serial.println("Re Iniciando..."); delay(2000); resetFunc(); // reseteo el Arduino } Serial.print(F("Dato en el bloque ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 16); Serial.println(); Serial.println(); //------------Fin lectura del bloque num-------------- mfrc522.PICC_HaltA(); // Halt PICC mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD Serial.println(F("Espere para elegir otro bloque.....")); Serial.println(F("******************************************")); Serial.println(F("******************************************")); //Reinicio luego de un tiempo delay(3000); resetFunc(); // reseteo el Arduino } void dump_byte_array(byte *buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX);//Muestra en HEX } Serial.println();//Renglon en blanco for (byte i = 0; i < bufferSize; i++) { Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.write(buffer[i]);//Muestra contenido para leer } }