Paso 6: Detectar la tarjeta dejando al lector
Detectar cuando una tarjeta se ha ido
Formalmente, uno le muestra el pin /CARD_PRESENT para ver si se ha ido de alta, pero no necesitamos ninguna steenkin' / CARD_PRESENT que otro puerto de la entrada-salida. Aquí es donde vienen los temporizadores.
Cada vez que la interrupción se llama porque hemos detectado un flanco descendente en mini-alarma, paramos un temporizador, borrar el valor de temporizador y empezar a leer. Cuando hemos terminado de lectura empezar el temporizador otra vez. Repetir anuncios puede, o hasta que el contador alcanza cierto valor. Esto significa que se ha llamado la última interrupción y sin más datos ha llegado, así que supongo que eso es todo y empiecen a procesar los datos que hemos recopilado.
Contadores de tiempo, utilizamos TIMER1, es decir el temporizador de 16 bits. Estoy utilizando un resonador de 16 Mhz externamente a mi AVR. Si está utilizando un arduino, entonces probablemente estás, también. Por lo tanto, he elegido un valor de divisor de 1024 que significa cada (16000000 / 1024) veces se incrementará el contador de tiempo. Es decir, será 'tick' 15.625 veces por segundo. El /CARD_PRESENT irá alto indicando que la tarjeta ha dejado el lector sobre 150ms después el último bit de datos. Sabiendo esto, sólo decidió comprobar sobre cada 1/4 de segundo. Sería algo como esto:
que resulta para ser alrededor de 3900. Por lo tanto, cuando el contador del temporizador TCNT1 llegue a 3900, entonces sé ha sido unos 300ms y puedo concluir con bastante seguridad que la tarjeta ha dejado el lector. Fácil.
Usted ha visto en el ISR donde el temporizador iniciado, detenido y autorizado en cada interrupción. Ahora, en el bucle principal sólo comprueba si el temporizador contador ha alcanzado el valor del objetivo y si es así, iniciar el procesamiento de datos.
Ahora es seguro procesar los datos.