ESP32 MFRC522 y While para detectar si la tarjeta sigue en comunicación

hola, buenas tardes,

estoy a la mitad de un programa para grabar datos en una tarjeta mifare de 1k y el problema que no puedo resolver es el siguiente:

en general, el usuario colocará la tarjeta en un lector, la tarjeta entra en una especie de caja y será retirada cuando se termine la grabación,

el detalle del proceso es este: cuando el esp32 detecta que se ingresó una tarjeta, obtiene los datos y espera que el usuario, mediante unos botones, seleccione los datos a grabar, mientras tanto no se debe cortar la comunicación con la tarjeta (no se debe ejecutar PICC_HaltA)

cuando el usuario presiona el boton de grabación, el esp32 graba los datos en la tarjeta y corta la comunicación mediante PICC_HaltA y PCD_StopCrypto1

el código donde el esp espera al ingreso de datos por parte del usuario pensaba en hacerlo con un while que compruebe el estado de la comunicación pero que no interfiera con la grabación, como autenticar otro bloque o algún procedimiento similar, pero no encontré nada,

necesitaría algo como while ( ComunicacionSigueActiva() ) para detectar si el usuario retira la tarjeta anticipadamente,

alguna sugerencia?

muchas gracias,
saludos,

No entiendo tu pregunta porque la respuesta a mi me parece tan simple que no merece pregunta pero te transmito lo que pienso del tema.

cuando tu haces

// Revisamos si hay nuevas tarjetas  presentes
if ( mfrc522.PICC_IsNewCardPresent()) 

detectas la tarjeta
y cuando haces

// Terminamos la lectura de la tarjeta  actual
                  mfrc522.PICC_HaltA();   

terminas el proceso en la tarjeta.
Tu while debe estar pendiente de que todos los pasos a grabar se haya cumplido y recién ahi insertar lo necesario como para salir del while y entonces si terminar con mfrc522.PICC_HaltA();
No busques algo asi, porque seguramente no lo vas a encontrar pero en lugar de perder tiempo experimenta programando la solución.

Moderador:
Todo lo que involucre micros no Atmel o ahora Microchip va en la sección microcontroladores.

para responderlo bién simple y que cualquiera lo entienda,

entre la inicialización de la tarjeta y el picc_halta necesito un while con un condicionante que me indique si la tarjeta sigue en conexión, si se retira la tarjeta, es decir: si se corta la conexión, que el condicionante retorne una condición falsa y que la ejecución salga del while,

if ( ! mfrc522.PICC_IsNewCardPresent())
{
  return;
}

if ( ! mfrc522.PICC_ReadCardSerial())
{
  return;
}

while ( /* CONDICIONANTE QUE NECESITO  */ )
{
  /*
   * acá se procesan las variables volatile bool que las interrupciones
   * que generan los botones las setean en true
   * 
   * cuando el botón de grabar lanza una irq, se ejecuta la función 
   * que graba los datos en la tarjeta y un break saca del while
   */
}

rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();

espero haber aclarado mi pregunta

Tal vez esta resolución de problemas de github te sirva o de ideas.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.