Pulsadores y tiempos

Saludos a todos, espero me puedan dar una mano o una idea de lo que podría aplicar para lo que estoy interesado en hacer.

Lo que me interesa hacer es colocar un pulsador y 3 leds.

Si presiono el pulsador por 3 segundos: que se prenda el led1.
si luego de estos 3 segundos persiste o hubo por lo menos 1 pulsación antes de llegar a los 5 segundos: se activa el led2 (de lo contrario se regresa al inicio).
si luego de los 5 segundos persiste o hubo una pulsación antes de los 10 segundos: se activa el led3 (de lo contrario se regresa al inicio).

Espero sus aportes, gracias.

Hola, te dejo un código que hace sólo lo básico, tendrás que agregarle más condiciones para que haga todo lo que necesitas:

#include <TimerOne.h>

int contador=0;
int bandera3seg=0;
int bandera5seg=0;
int bandera10seg=0;


void cienMilis() {
    if (!digitalRead(5)){
       contador++;
    }
    if (contador == 30){
        bandera3seg=1;
    }
    if (contador == 50){
        bandera5seg=1;
    }
    if (contador == 100){
        bandera10seg=1;
    }
}

void setup() {
  Timer1.initialize(100000); //uS
  Timer1.attachInterrupt(cienMilis);
  pinMode(5,INPUT_PULLUP);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(12,OUTPUT);
}

void loop() {
  if (bandera3seg){
    digitalWrite(10,HIGH);
  }
  if (bandera5seg){
    digitalWrite(11,HIGH);
  }
  if (bandera10seg){
    digitalWrite(12,HIGH);
  }

}

Hago uso de la librería TimerOne para poder llevar los tiempos.