Programar Sensor de movimiento

Quiero que me ayuden con mi programa, no soy tan bueno en arduino, tengo un sensor de movimiento, el programa funciona bien, solo que quiero que cuando no detecte movimiento el led aun siga encendido por un tiempo determinado.

const int sensor = 7;
const int luz = 8;
int estado;

void setup() {
 pinMode(sensor, INPUT);
 pinMode(luz, OUTPUT);
 digitalWrite(luz, LOW);
}

void loop() {
 estado = digitalRead(sensor);
 if (estado == HIGH){
 digitalWrite(luz, HIGH);
 }
 else {
 digitalWrite(luz, LOW);
 }

}

sketch_may04a.ino (272 Bytes)

A ver si esto te sirve.
He creado una etiqueta RETARDO que tiene el tiempo que quieres que el led permanezca en ON
Ese tiempo esta dado en seg x 1000 = X milisegundos.
Lo demás queda igual salvo cuando se produce de haber detectado movimiento a que ya no detecta.
En ese momento paso de 1 a 0 o de HIGH a LOW. BUeno ahi inicio una variable llamada start con el valor de millis() + RETARDO.

millis() es un contador de milisegundos que arranca cuando Arduino se energiza.
Imagina que tienes un reloj que arranca cuando se enciende arduino.
Bien... tomas el valor en ese instante. Cuando debería ponerse en low el led.
Entonces se activa una variable que llamé retengoLed.
Esa variable toma el valor de true o HIGH
Cada vez que el código encuentre a retengoLed en HIGH pone el LED en 1
Pero mientras pasa por esta consulta

if (millis() > start)

el contador millis() sigue aumentando y como antes cargue a start con el valor que tenia milis() mas 5 seg ese momento ocurrirá 5 segundos despues.
Cuando eso ocurra, retengoLed pasará a LOW o 0 y el LED se va a apagar.

#define RETARDO 5000 // 5 segundos = 5000 mseg 

const byte sensor 		= 7;
const byte luz 			= 8;
bool estado, estadoAnt 	= false;
unsigned long start;

void setup() {
	pinMode(sensor, INPUT);
	pinMode(luz, OUTPUT);
	digitalWrite(luz, LOW);
}

void loop() {
	estado = digitalRead(sensor);
	if (estado){
		digitalWrite(luz, HIGH);
	}
	if (!estado) {
		if (!estado && estadoAnt) {    // solo paso una vez por acá. Cuando el PIR pasa de HIGH a LOW
		    retengoLed = true;		   // uso estas lineas para inicializar el timer con millis()
		    start = millis()+ RETARDO;
		}
		
		if (retengoLed) {
			if (millis()>start) {
				retengoLed = false;    // se cumplio el tiempo en elque mantengo LED en HIGH
			}
		}
		else    
			digitalWrite(luz, LOW);
	}
}

Hola amigos:

Porque al tratar de compilar este proyecto me da este error, a lo mejor es algo elemental pero soy principiante en el tema de Arduino

'retengoLed' was not declared in this scope

Hola @rochaco6aaa, el hilo es del 2017 y según las normas del foro debes crear un hilo nuevo para hacer consultas al respecto.
Te invito a leer las Normas del foro y hacerlo.
Gracias.