Encienda el led con el botón por un período de tiempo y apáguelo si se presiona nuevamente el botón [cerrado]

-3

No puedo entender cómo escribir el código para la siguiente situación: Tengo una variable stayON = 5000; (5 segundos) que se utiliza para encender un LED durante 5 segundos después de presionar un botón y luego girarlo después de que haya transcurrido ese tiempo. Esta parte lo he hecho, pero ahora quiero romper este retraso si se presiona nuevamente el botón. Quiero apagar el LED si se presiona nuevamente el botón dentro de esos 5 segundos cuando el LED está encendido. No funciona con retraso () :(

    
pregunta Popescu Marian

2 respuestas

3

Suposiciones: está utilizando Arduino.

Busque el ejemplo blink_without_delay . Utiliza el valor de milis y lo compara con la última vez que se ejecutó el bucle para determinar si ha pasado suficiente tiempo. Traduzca el siguiente pseudo código al código de su aplicación y combínelo con el ejemplo para hacer lo que necesita.

Pseudo código:

if button pushed and light on {
   Turn light off
}

else if button pushed and light off  {
   Turn light on
}
    
respondido por el Butters
2

Una forma es usar interrupciones. Esa sería probablemente la mejor manera porque en ese momento, también puede hacer otras cosas si así lo desea. Pero una forma simple, especialmente si todo lo que está haciendo es simplemente controlar este led, es la siguiente

for(int x =0;x<500;x++)
{
  delay(10);
  if(digitalRead(button)==ON || x == 499)
    {
       digitalWrite(led)=OFF;
       break;
    }   
}

Se demora 10ms, y luego verifica si el botón está presionado o si estamos al final de nuestro conteo, y luego lo apaga.

Es posible que tengas que cambiar "ON" y "OFF" a lo que deban ser para tu configuración.

    
respondido por el efox29

Lea otras preguntas en las etiquetas