Coneccion Arduino Mega con Sistema de Pago

Nachtmotte:
Bueno con el cambio en el código da los siguientes datos:

Puse los billetes en la misma secuencia que en el anterior, $2, $5, $10, $20.

10 - 18443

0 - 18543
100 - 35875
0 - 35976
1000 - 45671
0 - 45771
1 - 53688
0 - 53787

Ahora sí como lo había explicado; y además los datos siguen siendo consistentes. El margen de error parece ser de apenas 1; el tiempo medido oscila entre 99 y 101 milisegundos.

Nachtmotte:
Entonces solo me quedan 2 dudas, modificando el codigo podria agregarle 4 entradas mas que serian las del lector de monedas o tengo que cambiar el codigo entero?

Para este código de prueba solo hay que cambiar la siguiente línea:

PCMSK2 = 15;

Por:

PCMSK2 = 255;

Esto es para indicarle al microcontrolador que ahora todos los 8 pines del grupo pueden disparar la interrupción.

Ahora solo es cuestión de conectar el resto de canales a los pines 12 al 15 analógicos.
Recuerda que la regla de que los bits se leen de derecha a izquierda todavía aplica; por lo tanto, si hay 8 cifras, la que esté más a la izquierda representa actividad en el canal conectado al pin 15 analógico; si hay 7 o menos, esta línea no está activa. Exactamente lo mismo, pero ahora con cuatro más.

Nachtmotte:
si yo le agrego mas funciones al arduino como sensores o control de otras partes de la maquina expendedora se ve afectado el control sobre los pulsos de los lectores o funcionaria normal? Es decir, contaria los pulsos de 100ms o habria un margen de error de no contarlos?

No debería. Las rutinas de interrupción fueron hechas para una ejecución "pseudo-paralela".
No es paralela porque literalmente interrumpe la ejecución normal (código y funciones llamadas en el loop), para (en este caso) iniciar/detener la medición del ancho de pulso; evento que es de atención inmediata independientemente de en que parte del código principal esté.
La ventaja de la interrupción es que cuando se dispara, siempre se ejecuta aunque en el programa principal esté atascado en un ciclo o delay.

Muy bien, ya tenemos que la medición del ancho de pulso nunca la perderemos o fallaremos; pero ahora me pregunto cómo se va a "conectar" el resultado de la medición con el programa principal.
¿Bastará con retener el último resultado o habrá que encolarlos mediante un búfer circular?