configuracion arduino UNO para realizar contador de paso con luz

hola a todos.
para comenzar soy nuevo en arduino y en este momento tengo el modelo UNO.
bueno quisiera solicitar ayuda para poder dejar pegado el pulso que envia un sensor ir.(no se si el ir es mi mejor opcion)
comprendo el funcionamiento del sensor pero quiero que vez que marque un 1 este me encienda una luz el tiempo que quiera, ese tiempo lo quiero contar y a la vez quiero que independiente si el sensor ir sigue marcando 1 este corte y al nuevo cambio 0 a 1 vuelva a encender la luz.
alguien me puede orientar si el ir es la mejor opcion???? :slight_smile:
de ante mano agradesco su atencion...

quisiera solicitar ayuda para poder dejar pegado el pulso que envia un sensor ir.(no se si el ir es mi mejor opcion)

Un sensor IR te entrega un valor HIGH o LOW cuando un objeto se interpone entre Emisor y Receptor o si es un sensor IR reflexivo (envía el haz y lo recibe en su receptor en el mismo sitio o mejor dicho muy cerca del emisor).
Esto es exactamente lo mismo que tener un pulsador o botón y presionarlo. Si miras el estado veras LOW o HIGH pero si miras el cambio verás que pasa de LOW a HIGH o al revés.

Para detectar esto se usan dos variables del tipo bool o bit 0 o 1.
llamaré a las variables estado y esadoAnt por estado Anterior.

bool estado, estadoAnt = false;

Defino a estadoAnt como false porque conectaré el boton entre el pin y GND. Realmente no me importa el estado anterior porque en realidad para este ejemplo es claramente HIGH y no LOW o sea true y no false como he hecho. Pero el sistema se corrige en solo un ciclo.

ahora para ver el estado del pulsador o IR hago esto

estado = digitalRead(pin);
if (estado && !estadoAnt) {
      // acción a tomar
}
estadoAnt = estado;

Bueno, acá tenemos varias cosas.
Si defino a pin como el número donde conecté el botón o el sensor IR. entonces con digitalRead puede leer su valor. En tanto no introduzca ningún delay eso lo haré tan rápido que no me perderé eventos.

como ya defini previamente las variables estado y estadoAnt sabemos que la 2da vale false y la primera supongamos que vale false porque el sensor IR ha detectado un objeto en su línea IR.
preguntar por estado es lo mismo que preguntar por estado == HIGH asi que es una forma elegante de poner lo mismo.
Esta secuencia lógica estado && !estadoAnt en realidad pregunta (HIGH && !LOW) o sea (HIGH && HIGH) lo cual es verdadero. Entonces cuando el estadoAnt tiene el valor LOW y el estado actual tiene el valor HIGH tenemos un flanco de subida de LOW a HIGH y la condición es VERDADERA y se ejectua lo que tenemos dentro del condicional.

Todo muy bien pero, como hago ahora para encienda una luz con eso?
Una manera es inciando un timer que armo con millils(). Repito nada de usar delay().

Ve a Documentación => Indice de temas tutoriales => millis()

con solo cargar una variable con el valor de millis() podras iniciar un contador de tiempo TU TIEMPO que cuando se vea superado apagará la luz. Por supuesto la acción del flanco 0 a 1 inicia el encendido de tu lámpara y cuando se supere el tiempo será su apagado.

Veamos como te manejas con esto.
Hay muchos ejemplos de millis() en documentación que refuerzan lo que te he comentado.