Duda con contador de pulsos

Lo que pasa es que tengo un contador, lo que quiero realizar es que cuando el valor del contador sea 1 espero unos 3 segundos y si en este lapso de tiempo recibió nuevamente otro pulso, contador tomará el valor de 2, sino contador sea igual a 0.

Y nuevamente espera unos 3 segundos y si en este lapso de tiempo recibió nuevamente otro pulso, contador tomará el valor de 3 y activará un led, sino contador será igual a 0.

tenía pensado utilizar un timer o una interrupción, pero no se si sea correcto. Aquí les muestro el código del contador y el del timer:

CONTADOR::

valorBoton=digitalRead(boton); //Leemos el estado del pulsador

if(valorBoton!=estadoAnteriorBoton){ //Si hay un cambio de estado, entramos en el if

if(valorBoton==1){
contador++; //Aumentamos en una unidad la cuenta
//Serial.println(contador); //
digitalWrite(led,HIGH); //Encendemos el led
}

if(valorBoton==0){
digitalWrite(led,LOW); //Apagamos el led
}
}
estadoAnteriorBoton=valorBoton; //guardamos el estado actual del pulsador para la siguiente iteración

Alarma con el timer:

if(contador==1)
{
#define button 3
#define interval 10000 /////////////////// Interválo de 1 segundo //////////
while (digitalRead(boton)==0){}
//digitalWrite(6, HIGH);
unsigned long previousMillis = millis();
Serial.println(previousMillis);
while (millis() - previousMillis < interval){}
unsigned long resta =(millis() - previousMillis);
Serial.println(millis());
//digitalWrite(6, LOW);
}
if(contador==3)
{
digitalWrite(6,HIGH);
}
else
{
digitalWrite(6,LOW);

}

Espero me puedan orientar y me mencionen los errores.

Gracias.