Considéralo bajo la siguiente premisa: el pulso generado por el ingreso de billetes y monedas puede ocurrir en cualquier momento, pero el Arduino está programado para manejar inmediatamente dicho evento.
Dependiendo del código principal, el uso de dicho dato podría incluso tardar medio segundo; lapso en el que perfectamente puede ocurrir otro pulso de ingreso de dinero. Si seguimos el esquema de "el último resultado", se podría dar el caso en que el programa principal alcance a procesar el último dato pero no el que había llegado antes; provocando una pérdida que se refleja en dinero absorbido por la máquina pero que no se contó.
Para solucionar este poco probable pero posible situación, tienes tres opciones:
- Almacenar los resultados en un búfer circular.
- Adaptar el código para que el ciclo del loop tarde el menor tiempo posible.
- "Consumir" los datos periódicamente mediante una interrupción por timer.