Funcion para chequear varias entradas digitales

surbyte:
No entiendo que es lo que no entiendes?

Y no crees que eso era realmente lo que tenias que preguntar? en vez de mandar la documentacion de la funciona millis (que la habia usado en el codigo, que yo mismo publique?

surbyte:
Dices trabajar con PLC y no sabes lo que haces millis()

Y tu has trabajado con PLCs? En todos los PLC las funciones de tiempo se hacen con temporizadores**, (y segun el modelo o marca, tienen su precisión) la funcion millis() no existe en los PLC (Si acaso se puede leer el registro interno del reloj del CPU, Algo que solo se usa para cosa muy muy especificas) Si quisiera saber el tiempo que un PLC llevar energizado, lo haria con un temporizador de un segundo, que de una senal de contacto de flanco de subida a un contador.

**Para funciones de tiempo y altas velocidades, como por ejemplo leer un encoder de 12000 ppr, es necesario modulos de entradas de alta velocidad y hacer funciones especificas, algunas marcas ya tienen desarrollado unos bloques en el ladder para estos casos (HSC High Speed Counters y son tan especifcos que son limitados segun el modelo del PLC). O realizar una funcion de continua lectura para nunca perder el conteo del tiempo (esto si lo debe de realizar a mano el programador)

surbyte:
Te lo he respondido muchas veces.

Lo que tu crees que entendiste de la pregunta y hasta de mala manera.

surbyte:
El cruce por cero genera un pulso corto, pero si pierdes dicho pulso (ahora hablo del pulso que puede durar algunos microsegundos) entonces puedes usar interrupciones.
Una interrupción se acciona con un flanco por ejemplo indicandote que hubo detección de cruce por cero y eso no afectará tu debounce ni nada. Activas un flag, lo chequeas en tu código y lo borras para la nueva interrupción y listo.
Sabes si hubo o no detección de cruce x cero.

Aquí esta la evidencia que nunca entendiste mi pregunta.... sigues hablando sobre la deteccion del pase por cero, interrupciones, etc....

Cuando toda mi pregunta era si el cruce por cero, me afectaría en la detección de una entrada

Y si.. ese pulso de algunos microsegundos, si afecta cambia el estado de la entrada y el código lo detecta, asi que la funcion del debounce nunca se iba a cumplir...

Aun estoy en la espera del pedido de los optoacopladores, pero realice una simulación con el proteus y el código, y no hace una detección correcta de la señal 220VAc

Es necesario hacer un debounce por hardware con un circuito R/C, para suavizar la señal de la salida del optoacoplador.

Cuando tenga los optoacopladores, y haga la prueba en fisico con el condensador, posteare (si aun puedo, Si no has borrado este post o me hayas baneado) todo el circuito y el codigo, para que alguien mas le sirva.

Saludos y muchas gracias por tu ayuda!!!