Duda con pulsadores

Hola!

Estoy haciendo una plataforma de salto con mi Arduino UNO R3, que calcula cuanto tiempo permanece una persona en el aire al saltar y tengo un problema con la programación.

El problema reside en los 3 condicionales del loop, pues no los cumple, y no se que puede ser.

    int L1 = 8, L2 = 9, R1 = 10, R2 = 11;


    void setup(){
          //INPUTS
          pinMode(L1, INPUT);
          pinMode(L2, INPUT);
          pinMode(R1, INPUT);
          pinMode(R2, INPUT);

         Serial.begin(9600);
                            } 
            

     void loop(){
          //GET PUSH VALUES
          int l1 = digitalRead(L1);
          int l2 = digitalRead(L2);
          int r1 = digitalRead(R1);
          int r2 = digitalRead(R2);

          int esl2, sl2, fl2, tiempol2; 
         //ESl2 ES EL ESTADO DEL SALTO
         //SL2 TIEMPO EN EL QUE DESPEGA
         //FL2 TIEMPO EN EL QUE CAE
         // TIEMPOL2 ES EL TIEMPO EN EL AIRE (FL2 - SL2)
      
      //esl2 = 0 **USUARIO FUERA DE LA PLATAFORMA**     l2 = 0; esl2 = 0;
      //esl2 = 1 **USUARIO EN LA PLATAFORMA**           l2 = 1; esl2 = 1;
      //esl2 = 2 **USUARIO EN EL AIRE**                 l2 = 0; esl2 = 2;
      //esl2 = 3 **USUARIO ATERRIZA EN LA PLATAFORMA**           l2 = 1; esl2 = 3;
         
 esl2 = 0;
                              if(esl2 == 0 && l2 == 1){
                             esl2 = 1; //CAMBIO EL ESTADO PARA INDICAR QUE YA ESTA EN LA PLATAFORMA
                              Serial.println("USUARIO EN LA PLATAFORMA");
                              
                              if(esl2 == 1 && l2 == 0){
                              esl2 = 2; //CAMBIA EL ESTADO PARA INDICAR QUE EL USUARIO HA DESPEGADO
                              sl2 = millis(); 
                              Serial.println("EL USUARIO HA SALTADO");
                              }
                                    
                              if(esl2 == 2 && l2 == 1){
                               esl2 = 3; //AQUI EL USUARIO YA HA ATERRIZADO
                                fl2 = millis();
                                Serial.println("SALTO ACABADO");
                              }
                              }

      Serial.print("TIEMPO EN EL AIRE (ms): "); Serial.println(tiempol2);   
      

    
}

ACLARACION: lo de estado es para poder distinguir entre cuando el usuario se sube para prepararse para saltar y cuando aterriza

Yo agregaría a tu programa unos Delay de unos 300ms, al presionar o soltar el botón.
Al presionar o soltar un botón, se genera un pequeño tren de pulsos (10101110001000111), esto es lo que podría
estar dando el problema. esto podría dar un pequeño margen de error en el tiempo de lectura del salto, pero
haría que funcionara, igual después puedes sumar o restar el tiempo que añadiste en el delay.

Puedes intentar con algo como:
1.- Se presiona Botón.
2. Delay (300) //mientras pasa el transitorio
3.- Se lee Estado del Pulsador.
4.- se espera a ser soltado el botón
5.- Se suelta boton
6.- Delay(300) //mientras pasa el transitorio.
7.- ETC.

Supongo que es ese el problema. No lo he probado pero puedes hacer la prueba con un simple botón.