Contar el tiempo de trabajo de un caudalímetro

Buenas tardes, soy un estudiante que apenas está empezando en esto y tengo un proyecto para la universidad, he trabajado con arduino antes un poco, pero con proyectos muy básicos, ésta vez intento hacer un medidor de flujo, el cual tenga un actuador (solenoide) que detenga y permita el flujo de agua mediante botones predeterminados con una cantidad exacta de litros.

Hasta ahora he logrado medir el caudal que pasa por el sensor, pero lo que necesito saber es el volumen para que la válvula se accione, la formula para el volumen es V = Caudal x Tiempo. sabiendo ésto, por regla de tres, lo único que necesito medir es el tiempo, para así multiplicarlo por el caudal a tiempo real y en cuanto la cantidad del cálculo coincida con la cantidad previamente pedida, la válvula se desactive y cierre el paso, mi gran pregunta es ¿Cómo hago para que en cuanto el caudalímetro empiece a medir, se inicie un conteo de tiempo (en minutos u horas) que al mismo tiempo se esté calculando (V = Q*T) y al coincidir dicho calculo con la cantidad previamente pedida, se active la válvula?

Adjunto el código escrito hasta ahora, de antemano, disculpen mi mi poco tecnicismo al expresarme.

volatile int NumPulsos; //variable para la cantidad de pulsos recibidos
int PinSensor = 2;    //Sensor conectado en el pin 2
float factor_conversion=7.5; //para convertir de frecuencia a caudal

//---Función que se ejecuta en interrupción---------------
void ContarPulsos ()
{ 
  NumPulsos++;  //incrementamos la variable de pulsos
} 

//---Función para obtener frecuencia de los pulsos--------
int ObtenerFrecuencia() 
{
  int frecuencia;
  NumPulsos = 0;   //Ponemos a 0 el número de pulsos
  interrupts();    //Habilitamos las interrupciones
  delay(1000);   //muestra de 1 segundo
  noInterrupts(); //Desabilitamos las interrupciones
  frecuencia=NumPulsos; //Hz(pulsos por segundo)
  return frecuencia;
}

void setup()
{ 
  Serial.begin(9600); 
  pinMode(PinSensor, INPUT); 
  attachInterrupt(0,ContarPulsos,RISING); //(Interrupcion 0(Pin2),funcion,Flanco de subida)
} 

void loop ()    
{
  
  float frecuencia=ObtenerFrecuencia(); //obtenemos la Frecuencia de los pulsos en Hz
  float caudal_L_m=frecuencia/factor_conversion; //calculamos el caudal en L/m
  float caudal_L_h=caudal_L_m*60; //calculamos el caudal en L/h

  //-----Enviamos por el puerto serie---------------
  Serial.print ("FrecuenciaPulsos: "); 
  Serial.print (frecuencia,0); 
  Serial.print ("Hz\tCaudal: "); 
  Serial.print (caudal_L_m,3); 
  Serial.print (" L/m\t"); 
   Serial.print (caudal_L_h,3); 
  Serial.println ("L/h"); 
  
}

Ve a Documentación => Indice de temas tutoriales => millis()

Hola darialex, bienvenido al foro.

En mi opinión te estas complicando. Lo único que tienes que hacer es contar los pulsos precalculados por ti, ya que Volumen = factor * pulsos.