¿como apagar un led en 5seg aunque el botón siga presionado?

Quisiera ayuda para encender un led con un botón y después de 5 segundos se apague aunque el boton siga presionado. y también cuando se suelte el boton se apague.

Ademas de que en el mismo se encienda con un if (boton=HIGH && sensor=HIGH) y se apague despues de 5 s.

Detecta el cambio en el boton de 0 a 1 por ejemplo, o sea de no presionado a presionado
Con ese cambio acciona un timer que puedes hacer con millis(), al cabo de 5 segundos apagas el led.
Y si aún no pasaron los 5 seg y el led sigue prendido y sueltas el botón al soltarlo lo accionas también.

Muestra que has hecho hasta ahora.

Es lo básico lo que he escrito, pero no logro como poner el paso para que se apague después de 5s y que el botón siga presionado.

int boton1 = 0;
int sensor1 = 0;

void setup()
{
 pinMode (2, INPUT); // boton1
 pinMode (3, INPUT); // sensor1
 pinMode (8, OUTPUT); // led

}

void loop()
{
 boton1 = digitalRead(2);
 sensor1 = digitalRead(3);
 if (boton1 == HIGH) 
 {
 digitalWrite(8, HIGH);
delay(5000);
digitalWrite(8, LOW);
 }

 
 if (boton1 == HIGH && sensor1 == HIGH)
 {digitalWrite(8, HIGH);
  delay(5000);
   digitalWrite(8, LOW);
 }
}

sketch_feb17a.ino (435 Bytes)

Va mi ejemplo, solo esperaba me mostraras algo hecho
Ajusta a tus botones y sensores.

const byte botonPin = 2; // pin conectado a 2
const byte ledPin     = 13; // uso LED conectado a Pin 13

bool statusBtn;
bool statusBtnAnterior; // para saber si cambió
bool estadoLed;
unsigned long start;

void setup() {
}

void loop() {

  statusBtn = digitalRead(botonPin); // leo el estado del pin

  if (statusBtn && !statusBtnAnt) { 
       estadoLed = true;               // activo el led
       start = millis() + 5000UL;      // cargo start con valor de millis() + 5seg
  }

  if (!statusBtn && statusBtnAnt)      // si sueltas el boton apago el led
       estadoLed = false;

  if (millis()>start && estadoLed)     // si el boton esta presionado y pasaron 5 seg apago el led
      estadoLed = false;  

  statusBtnAnt = statusBtn;

  if (estadoLed)
      digitalWrite(ledPin, HIGH);
  else 
      digitalWrite(ledPin, LOW);

}

Gracias por la ayuda me sirvió bien :slight_smile: Ahora revisare para agregar otra condición, si el led esta apagado, botón 1 esta presionado y se presiona un segundo botón, se encienda el led por 5 segundos igual.