AYUDA PROBLEMAS CON INTERRUPTORES, ARDUINO UNO

Hola a todos,
tengo que programar el uno de la siguiente manera,
tengo un interruptor que le da positivo a un pin (3) y tine una salida el pin(12) que tiene que encender 5 seggundos.
hasta aqui no es muy dificil pero el problema viene que cuando el pin 13 es low antes de 5 seg el pin 12 tiene que ser low,
os digo que el pin 3 es un interruptor no un pulsador,
si me pudierais dar una pista de como hacerlo o me escribierais el programa os lo agradeceria, por que yo ya no puedo mas, todo me falla.
un saludo,
muchas gracias de antemano.

Que tiene que hacer si lo mantienes pulsado mas de 5 segundos?
Y si sueltas el pulsador antes de los 5?

gracias marcial por contestar.
te explico
el interruptor cuando conecta tiene que encender un led 6 segundos y despues apagarse
hasta aqui todo normal,
pero si yo desconecto el interruptor el led se tiene que apagar
y si vuelvo a conectar se encienda el led por 5 seg.
un saludo

Puede fucionar algo asi?

byte entrada=3;
byte salida=12;

unsigned long Amillis;                                     // para almacenar ultimo tiempo
unsigned long tEncendido=5000;                             // tiempo de encendido

boolean Pulsado=false;
boolean Encendido=false;

void setup() 
{
  pinMode(entrada, INPUT);
  pinMode(salida, OUTPUT);
  digitalWrite(salida, LOW);                         
}

void loop() 
{
  Pulsado=digitalRead(entrada);
  
  if (Pulsado && !Encendido)    
  {
    Encendido=true;
    Amillis=millis() + tEncendido;
    digitalWrite(salida, HIGH);
  }
  if (Encendido && (!Pulsado || millis()>Amillis) )
  {
    Encendido=false;
    digitalWrite(salida, LOW);
  }
}

muchas gracias de nuevo,
con tu ayuda he podido conseguir que el progrma funcione, el tuyo no funciona y lo he modificado y te lo mando para que veas lo que he modificado.

byte entrada=3;
byte salida=12;

unsigned long lAmillis; // para almacenar ultimo tiempo
unsigned long lTEncendido=3000; // tiempo de encendido

boolean bPulsado=false;
boolean bEncendido=false;

void setup()
{
Serial.begin(9600);
pinMode(entrada, INPUT);
pinMode(salida, OUTPUT);
digitalWrite(salida, LOW);
}

void loop()
{
bPulsado=digitalRead(entrada); //lee el interruptor

if (bPulsado==true && bEncendido==false)
{
bEncendido=true;
lAmillis=millis() + lTEncendido;
digitalWrite(salida, HIGH);
}
if (millis()>lAmillis)
{
digitalWrite(salida,LOW);

}
if (bPulsado==LOW)
{
digitalWrite(salida,LOW);
bEncendido=false;
}

Serial.print("pulsado= ");
Serial.print(bPulsado);
Serial.print(" encendido= ");
Serial.print(bEncendido);
Serial.print(" millis= ");
Serial.print(millis());
Serial.print(" Amillis= ");
Serial.println(lAmillis);

}

de nuevo muchas gracias marcial

Disculpa el error, no he tenido tiempo de probarlo . Y algo he aprendido, hay q mirar lo que se escribe dos veces, jajajaja.
Me alego que hayas solucionado, y al menos haberte puesto en el buen camino :slight_smile:

MARCIALLLLLLLLLLL.
ajajajja
si pasas por sevilla algun dia te cambio el aceite gratis
pero al coche ( no pienses mal), jajajja

mejor al coche si, jajajajaja