Ajuda com exculção de case por quantidade de pulsos

Amigos montei esse Script so que estou com dificuldades para definir uma outra forma de se excultar os cases.
Vamos ou Script.

int pulsos = 0;
boolean pulso=0;
boolean pulsoI=0;
int led = 13;
void setup()
{
pulso=HIGH;
pinMode(3,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
pinMode(13,OUTPUT);
Serial.begin(9600);
}

void loop()

{
Serial.println(pulsos);

if(digitalRead(3)==HIGH){if(pulso==HIGH){pulsos = pulsos + 1;} pulso=LOW;}
else{pulso=HIGH;}

if(digitalRead(5)==LOW)
{
switch(pulsos){

case 2:
for(int i=0;i<1;i++){digitalWrite(led, HIGH);delay(50);digitalWrite(led, LOW);delay(100);pulsos = 1;}
break;
case 3:
for(int i=0;i<1;i++){digitalWrite(led, HIGH);delay(50);digitalWrite(led, LOW);delay(100);pulsos = 1;}
break;

case 6:
for(int i=0;i<3;i++){digitalWrite(led, HIGH);delay(50);digitalWrite(led, LOW);delay(100);pulsos = 1;}
break;

case 11:
for(int i=0;i<6;i++){digitalWrite(led, HIGH);delay(50);digitalWrite(led, LOW);delay(100);pulsos = 1;}
break;

case 21:
for(int i=0;i<10;i++){digitalWrite(led, HIGH);delay(50);digitalWrite(led, LOW);delay(100);pulsos = 1;}
break;
}}}

Galera nesse script eu tenho um equipamento que gera pulsos que são contados pelo pino 3. Até ai tudo bem... Mais para execultar o case referente aos pulsos eu tenho que clicar o pino 5 ( if(digitalRead(5)==LOW) ). O que eu gostaria mesmo era que esse processo aconteça automaticamente e não estou sabendo como fazer isso. Tentei tirar o if(digitalRead(5)==LOW) ai não consigo passar do premeiro clik. Ajuda ai amigos!!!

Infelizmente nao tens outra solucao...

Podes temporizar e tens de dar X pulsos dentro dum determinado tempo. Ao fim desse determinado tempo, o programa faz a seccao dos pulsos. Isto pode funcionar... mas das duas uma, ou ficas a espera da temporizacao... ou nao das os pulsos todos dentro da temporizacao.

A solucao que tens do segundo botao e a mais eficiente que tens.

Obrigado Bubulindo pela resposta!!!! Mais eu estava pensando em fazer algo assim; se digitalRead(5) ficar em HIGH por mais que X tempo execultar switch(pulsos){ case.....), e que essa contage de tempo começaria com o primeiro pulso LOW... Mais não sei como escrever isso. Poderia me ajudar? desde já muito obrigado!!!!

vagner:
Obrigado Bubulindo pela resposta!!!! Mais eu estava pensando em fazer algo assim; se digitalRead(5) ficar em HIGH por mais que X tempo execultar switch(pulsos){ case.....), e que essa contage de tempo começaria com o primeiro pulso LOW... Mais não sei como escrever isso. Poderia me ajudar? desde já muito obrigado!!!!

Em relação a contagem de tempo enquanto um botão for pressionado, já implementei o código abaixo e deu certo. veja se consegue implementar algo semelhante.

if(digitalRead(5)==HIGH){
      unsigned long time = millis();    //Armazena tempo atual
      while(digitalRead(5)==HIGH){}     //Não faz nada enquanto o 5 == HIGH
      unsigned long diferenca = millis() - time;    //Armazena o tempo em que o botão for pressionado
      //como tempo do botão pressionado a implementação posterior fica por sua conta
}

Espero que tenha entendido e que seja útil.

Abraços

Sim Amigo entendi!!!! vou implementar assim que chegar em casa e posto os resultados.... Obridado!!!

Fala Vágner. Qual é o equipamento. Qual a duração, freqüência do trem de pulsos? Creio que dá pra fazer algo automático sim