//ProgramaEscribrTarjLlaveUnBloque3B (Se depuro lineas respecto al A) //Luego lee el bloque escrito //Adaptado Profesor Bolaños 2018 - Ensayado #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 escribir //-----------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 escribir...(3seg)"); delay(3000); Serial.println("*********************************************"); Serial.println("Ingrese bloque a escribir...(5seg)"); delay(5000);//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)||(num==3)|| (num==11)|| (num==15)|| (num==19)|| (num==23)|| (num==27)|| (num==31)|| (num==35)|| (num==39)|| (num==43)|| (num==47)|| (num==51)|| (num==55)|| (num==59)|| (num==63)) { 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 escribir -->"); Serial.print(num); Serial.println(" ------------------Aceptado"); Serial.println("Preparece para escribir..."); delay(3000); //Tiempo para que el usuario lea numero de bloque ingresado //Serial.print(num); } Serial.println("****----------------------------****"); delay(3000); //**********FIN Ingresar numero de bloque*************** SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card Serial.println(F("Coloque (si no lo hizo) tarjeta para Escribir dato en bloque")); delay(3000); //tiempo para colocar tarjeta si ya lo se hizo } 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; Serial.setTimeout(20000L) ; // wait until 20 seconds for input from serial // Ask personal data: First name Serial.println(F("Escriba Dato, al final incluya # (tiene 20 seg)")); len=Serial.readBytesUntil('#', (char *) buffer, 20) ; // read first name from serial for (byte i = len; i < 20; i++) buffer[i] = ' '; // pad with spaces block = num; //Se especifica en que bloque se escribira _____------______-----______ 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; } // Write block status = mfrc522.MIFARE_Write(block, buffer, 16); if (status != MFRC522::STATUS_OK) { Serial.print(F("MIFARE_Write() failed: ")); Serial.println(mfrc522.GetStatusCodeName(status)); Serial.println("Re Iniciando..."); Serial.println("+++++++++++++++++++++++++++++++++++++++"); delay(2000); resetFunc(); // reseteo el Arduino return; } else Serial.println(F("MIFARE_Write() Escritura Realizada Corectamente: ")); Serial.println(" "); //Se leera el bloque escrito //---------------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 } }