Mandar pulso a LED

Muy bien, lo pude hacer, hice de 2 formas(podría haber echo una tercera pero no me salio con millis()):

int entrada = 2;
int led = 3;
int estadoPulsador;
bool paso1 = false;
bool paso2 = false;

void setup() {
Serial.begin(9600);
  
pinMode(entrada,INPUT_PULLUP);
pinMode(led, OUTPUT);

digitalWrite(led, LOW);

}

void loop() {

estadoPulsador = digitalRead(entrada);
digitalWrite(led, LOW);


  if (estadoPulsador == HIGH && paso1 == false){
          digitalWrite(led, HIGH);
          delay(100);
          digitalWrite(led, LOW);
          delay(500);
          paso1=true;
          paso2=true;
      
  }

  if (estadoPulsador == LOW && paso2==true){ 
          digitalWrite(led, HIGH);
          delay(100);
          digitalWrite(led, LOW);
          delay(500);
          paso1=false;
          paso2=false;
          
          
  } 


}

Este es el primer codigo que pude hacer funcionar pero utiliza delay, aca dejo como funciona debia funcionar el programa.
prueba del programa en tinkercard
Y el problema con este programa es que al principio manda una señal de estado alto y nose porque(son los delay pero bueno).

El segundo programa es lo mismo pero con una libreria:

#include <Temporizador.h>
Temporizador temp;
Temporizador temp2;
Temporizador temp3;
Temporizador temp4;

int entrada = 2;
int led = 3;
int estadoPulsador;
bool paso1 = false;
bool paso2 = false;
int contador;

void setup() {
  
pinMode(entrada,INPUT_PULLUP);
pinMode(led, OUTPUT);

temp.temporizar(0,0,0,0,10);
temp2.temporizar(0,0,0,0,200);
temp3.temporizar(0,0,0,0,10);
temp4.temporizar(0,0,0,0,100);

}

void loop() {

estadoPulsador = digitalRead(entrada);

  if (estadoPulsador == HIGH && paso1 == false){
    temp.temporizar(0,0,0,0,10);
    contador = 1;}
    if(contador == 1){
      if(temp.completado()){
          digitalWrite(led, HIGH);
          temp2.temporizar(0,0,0,0,200);
          contador = 2;}}
          if(contador == 2){
            if(temp2.completado()){
            digitalWrite(led, LOW);
          paso1=true;
          paso2=true;
          contador = 3;
  }}

  if (estadoPulsador == LOW && paso2==true){ 
    temp3.temporizar(0,0,0,0,10);
    contador = 4;}
    if(contador == 4){
      if(temp3.completado()){
          digitalWrite(led, HIGH);
          temp4.temporizar(0,0,0,0,100);
          contador = 5;}}
          if(contador == 5){
            if(temp4.completado()){
            digitalWrite(led, LOW);
          paso1=false;
          paso2=false;
          contador = 5;    
  }}


}

El problema con este es cuando presiono muy rápido el botón y lo suelto se queda el led prendido.
Acá el link de la librería utilizada:temporizador

Intente hacerlo con millis() pero los tiempos se correspondían y el programa no funcionaba :confused: lastima que lo borre, mas tarde lo voy a intentar de nuevo y lo paso aca.