contador de pulso variable (ayuda)

hola quería saber si alguien me puede ayudar con mi código:

lo que intento es que me tome un pulso variable por el pin 2 y cada 2 pulsos prender un led pin13

el problema que tengo es cuando varia la frecuencia del pulso. prende y apaga cuando quiere el led.

El tipo de entrada es a masa para eliminar ruidos.

int conta = 0;  //Variable para guardar el conteo de los pulsos
//------------------------------------
//Funcion principal
//------------------------------------
void setup() 
{
 pinMode(2,INPUT);     //Configura el pin 2 como una entrada, pulsador
 pinMode(13,OUTPUT);   //Configura el pin 13 como una salida, LED
}

//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop() 
{           

 // Si el pulsador esta oprimido
 if ( digitalRead(2) == LOW ) 
 {
     // Si el pulsador no esta oprimido, flanco de subida
     if ( digitalRead(2) == HIGH )
     {
        conta++;               //Incrementa el contador
     }
 }

 // Si el valor del contador es 2
 if (conta==2)
 {
   digitalWrite(13,HIGH);  //Enciende el LED
 }

 // Si el valor del contador es mayor o igual a 3 resetear
 if (conta>=3)
 {
   digitalWrite(13,LOW);  // Apaga el LED
   conta=0;
 }

}
/ Si el pulsador no esta oprimido, flanco de subida
     if ( digitalRead(2) == HIGH )

Esto no es flanco de subida, sino ver si esta en HIGH

Esto es flanco de subida

/ Si el pulsador no esta oprimido, flanco de subida
     // esto en globales
     bool valorAnt = false;
     bool valor;

     //  esto donde esta tu código actual
     valor = digitalRead(2);
     if ( valor == HIGH && valorAnt == LOW) {
          // lo que corresponda hacer
     }
      valorAnt = valor;

ya lo soluciones con la ayuda de surbyte. Muchísimas gracias :slight_smile:

El programa seria un contador de pulsos de frecuencia variable.

les muestro el codigo.

int conta = 0;  //Variable para guardar el conteo de los pulsos
bool valorAnt = false;
bool valor;
//------------------------------------
//Funcion principal
//------------------------------------
void setup() 
{
 pinMode(2,INPUT);     //Configura el pin 2 como una entrada, pulsador
 pinMode(13,OUTPUT);   //Configura el pin 13 como una salida, LED
}

//------------------------------------
//Funcion ciclicla
//------------------------------------
void loop() 
{           
     //  Si el pulsador no esta oprimido, flanco de subida

     valor = digitalRead(2);

     if ( valor == HIGH && valorAnt == LOW) {

        conta++;  // suma a la variable conta

     }
      valorAnt = valor;


 // Si el valor del contador es 2
 if (conta==2)
 {
   digitalWrite(9,HIGH);  //Enciende el LED
 }

 // Si el valor del contador es mayor o igual a 3 resetear
 if (conta>=3)
 {
   digitalWrite(13,LOW);  // Apaga el LED
   conta=0;
 }

}