problema con keypad, sensor de flujo yf-s201 y switch/case

buenos dias amigos, estoy programando la lectura de 4 sensores de flujo de agua en 3 pantallas lcd 16x2 i2c mediante arduino mega (en base a codigos que encontre en diferentes paginas) y un keypad 4x4. Programe parte por parte cada cosa, es decir primero la lactura del sensor de flujo y funciona perfecto, programe el keypad en cual utilizo el switch case dentro del void loop() para que me made dierentes mensajes en cada lcd segun presione el bton A,B,C,D del keypad y tambien funciono.

ahora junte todo, y por ejemplo si presiona A del keypad deberia leerme valores de 2 sensores de flujo, si presiono B, deberia leerme valores de otros 2 sensores de flujo. no funciono :’(, no me error al compilar ni al enviar al arduino. Al presionar A, las lcd se encienden, se muestran los mensajes pero no lee el sensor a menos que presione continuamente A en el keypad.

switch(customKey) 
  {
  case '0' ... '9': // Alamacena el valor hasta que presionemos "ABCD"
    lcd2.clear();
    lcd3.clear();
    lcd2.setCursor(0,0);
    lcd2.print("--> PROGRAMA B");
    lcd3.setCursor(0,0);
    lcd3.print("VOL. REQUERIDO"); 
    lcd3.setCursor(0,1);
    first = first * 10 + (customKey - '0');
    lcd3.print(first);
    lcd3.print(" Litros");
  break;
    
  case 'A':
    lcd2.clear();
    lcd3.clear();
    lcd2.print("--> PROGRAMA A");
    lcd3.print("INICIANDO");
    lcd3.setCursor(0,1);
    lcd3.print("PROGRAMA A");
    digitalWrite(22, HIGH);           //Abrimos la valvula solenoide
    
    // Cada segundo calculamos e imprimimos el caudal y el número de litros consumidos
    if(millis() - tiempoAnterior > 1000)
    {
      // Realizo los cálculos
      tiempoAnterior = millis(); // Actualizo el nuevo tiempo
      pulsos_Acumulados1 += pulsos1; // Número de pulsos acumulados
      pulsos_Acumulados2 += pulsos2; // Número de pulsos acumulados
      litros_Hora1 = (pulsos1 * 60 / 6.67); // Q = frecuencia * 60/ 7.5 (L/Hora)
      litros_Hora2 = (pulsos2 * 60 / 6.67); // Q = frecuencia * 60/ 7.5 (L/Hora)
      litros = pulsos_Acumulados2*1.0/450; // Cada 450 pulsos son un litro
      pulsos1 = 0; // Pongo nuevamente el número de pulsos a cero
      pulsos2 = 0; // Pongo nuevamente el número de pulsos a cero
     
      // Llamada a la función que muestra los resultados en el LCD 1602
      LCD_1602(); 
}
    
  break;
    
  case 'B':
      lcd2.clear();
      lcd3.clear();
      if(first<10 || first>4000){
        lcd2.print("--> PROGRAMA B");
        lcd3.print(first);
        lcd3.print(" Litros");
        lcd3.setCursor(0,1);
        lcd3.print("Fuera de rango");
      }
      else{
        lcd2.print("--> PROGRAMA B");
        lcd3.print("INICIANDO");
        lcd3.setCursor(0,1);
        lcd3.print("PROGRAMA B");
        digitalWrite(22, HIGH);       //Abrimos la valvula solenoide
      }
  break;
  
  case 'C':
    lcd2.clear();
    lcd2.print("--> PROGRAMA C");
    lcd3.clear();
    lcd3.print("INICIANDO");
    lcd3.setCursor(0,1);
    lcd3.print("REGENERACION");
  break;
  
  case 'D':
    lcd1.clear();
    lcd2.clear();
    lcd3.clear();
    lcd3.print("PROCESO TERMINADO");
    digitalWrite(22, LOW);            //Cerramos la valvula
    digitalWrite(24, LOW);            //apagamos la bomba
    first=0;
    delay(1000);
    lcd3.clear();
    lcd1.print("DESIONIZACION");        
    lcd1.setCursor(0,1);    
    lcd1.print("ELIJA UNA OPCION");  
    
    lcd2.print("ESPERANDO ORDENES");        
    lcd2.setCursor(0,1);    
    lcd2.print("DESDE EL KEYPAD");  
    
    lcd3.print("VALVULA CERRADA");        
    lcd3.setCursor(0,1);    
    lcd3.print("NO HAY FLUJO");
  break;
  
  case '#':
    lcd2.clear();
    lcd2.print("ESPERANDO ORDENES");        
    lcd2.setCursor(0,1);    
    lcd2.print("DESDE EL KEYPAD");  
    first=0;
  break; 
  }
}
void LCD_1602()
  {
    lcd1.clear();
    lcd1.print("COL CATIONICA");
    lcd1.setCursor(0,1);
    lcd1.print("Flujo=");  
    lcd1.print(litros_Hora1, 2);
    lcd1.print(" L/h");      

    lcd2.clear();
    lcd2.print("COL ANIONICA");
    lcd2.setCursor(0,1);
    lcd2.print("Flujo=");  
    lcd2.print(litros_Hora2, 2);
    lcd2.print(" L/h"); 
    
    lcd3.clear();
    lcd3.print("VOL TRATADO");
    lcd3.setCursor(0,1);
    lcd3.print("Volumen=");
    lcd3.print(litros,2);    
    lcd3.print(" L");  
  }

solo coloque desde el void pues todo lo demas funciona, deberia presionar A en el keypad una sola vez y el sensor deberia poder leerse continuamente, en cambio tengo que presionar muchas veces y en cada vez me lee una vez el sensor tmb, ayuda por favor, soy novato en esto.

Si presionas A, el programa entre en el case 'A': pero luego requiere de 1000 mseg para poder presentar la información.
Para ello deberías hacer otra cosa y no lo que haces.
Deberías tener una switch para procesar las teclas y otro switch para procesar los comandos que esas teclas representan ya que tu quieres que A se siga ejecutando hasta que presiones otra cosa.

Dime si lo entiendes?

muchas gracias por la respuesta bro, eso hice cree 2 swich como dijiste y salio bien todo, perdon por responder tarde pero este proyecto me tiene muy ocupado y olvide revisar el foro.

Si esta resuelto, agrega [SOLUCIONADO] a tu título.