[Solucionado] Problemas para montar un disparador de flanco ascendente.--

Hola a todos, soy nuevo en el foro y novato con Arduino.

Estoy intentando programar un switch que al presionarlo encienda un led durante 1 segundo y luego se apague, aunque el switch se mantenga presionado.

Por eso pensé en un trigger de flanco ascendente, pero se me esta complicando con el código (no estoy familiarizado con la programación aun). Logre programar el evento de encendido pero no me doy cuenta como hacer para que solo se considere el flanco como disparador del evento.

Solucion:

int estado0 = 0;
int estado1 = 0;

void setup()
{
  pinMode(8, INPUT);
  pinMode(4, OUTPUT);
}

void loop()
{
  estado0 = digitalRead(8);
  if (estado0 && !estado1) {
    digitalWrite(4, HIGH);
    delay(1000); // Wait for 1000 millisecond(s)
    digitalWrite(4, LOW);
  }
  estado1 = estado0;
  }

Bueno pero si el permanece mas de 1 segundo que pasa con ese código? Fallaría porque se acciona lo que este en el pin 8 durante 1 segundo luego se apaga y como sigue presionado vuelve a accionarse durante 1 segundo y asi infinitamente.

En cambio si detectara el flanco ascendente, un retardo de 1 segundo accionará el pin 8 durante 1 segundo y nunca mas hasta que haya otro flanco.

Son dos cosas diferentes.

Esto si funciona por flancos (de subida o sea de 0 a 1)

bool estado, estadoAnt = false;
unsigned long start;

void setup(){
  pinMode(8, INPUT);
  pinMode(4, OUTPUT);
}

void loop(){

  estado  = digitalRead(8);	
  if (estado && !estadoAnt) {  // disparo pin 4 x 1 segundo
  	  start = millis();
      digitalWrite(4, HIGH);
  }
  estadoAnt = estado;

  if (millis() - start > 1000UL) {
  	  digitalWrite(4, LOW);
  }  
}

Ahora el otro código funciona, si. Pero.. siempre que se suelte el pulsador/botón antes del segundo sino hará tonterías.
En este podriamos mejorar con un flag el hecho que no vuelva a entrar a comparar tiempos pero es un detalle.

Exacto y ademas como no lo usamos cuando lo usamos como hiciste ArduMyth te engaña porque ya tu cabeza como la mia y la de muchos desistió de usarlo.
Justamente el flag que no quise usar para que no se repita la consulta con millis() pero... a quien molesta. No deja de ser un ejemplo de aprendizaje.

Gracias a ambos, me quedaron clarisimas las explicaciones.