Progetto per viscosimetro

Buonasera, sto cercando di realizzare un viscosimetro per inchiostro da stampa flessografica, in pratica devo misurare il tempo che ci impiega una tot quantità di inchiostro a svuotarsi da un recipiente, (praticamente una tazza di Ford) ed impostando un setpoint fare in modo che quando il valore misurato supera il suddetto setpoint venga aggiunto del diluente!
posto lo sketch:

const byte HALLSENSOR1    = 5;
const byte HALLSENSOR2    = 8;
const byte LED1           = 7;
const byte LED2           = 9;
const byte DIL            = 13;
unsigned long tinizio     = 0;
unsigned long tfinale     = 0;
unsigned long ttotale     = 0;
bool hs1, hs2, hs1Ant, hs2Ant;
int v;
int const potPin = A0; // variabile associata al pin su cui è collegato il potenziometro
int potVal;           // variabile per la lettura del potenziometro
int mapped;           // mappatura potenziometro

int MinValue = 10;
int MaxValue = 56;

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup() {

  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Viscosimetro");
  lcd.setCursor(0, 1);
  lcd.print("CD version.1");
  delay(3000);
  lcd.clear();

  pinMode(LED1, OUTPUT);
  pinMode(HALLSENSOR1, INPUT);
  pinMode(LED2, OUTPUT);
  pinMode(HALLSENSOR2, INPUT);
  pinMode(DIL, OUTPUT);
}

void loop() {
  potVal = analogRead(potPin);
  mapped = map(potVal, 0, 1024, MinValue, MaxValue);

  hs1 = digitalRead(HALLSENSOR1);
  hs2 = digitalRead(HALLSENSOR2);

  lcd.setCursor(0, 1);
  lcd.print("Set Point: ");
  lcd.print(mapped);
  lcd.print("    ");
  delay(150);

  if (hs1 && !hs1Ant) {
    tinizio = millis();
    digitalWrite(LED1, HIGH);

  } else {
    digitalWrite(LED1, LOW);
  }
  hs1Ant = hs1;

  if (hs2 && !hs2Ant) {
    digitalWrite(LED2, HIGH);
    ttotale = millis() - tinizio;
    lcd.setCursor(0, 0);
    lcd.print("Valore reale: ");
    lcd.print(ttotale / 1000);
    lcd.print("    ");

  } else {
    digitalWrite(LED2, LOW);
  }
  hs2Ant = hs2;

  if ((ttotale / 1000) <= mapped) {
    digitalWrite(DIL, LOW);
  }
  else
  {
    digitalWrite(DIL, HIGH);
  }
}

provo a descrivere:
misuro il tempo tra i due sensori ad effetto Hall,
mappo un potenziometro da dove setto il valore della viscosità desiderata,
confronto il valore misurato con il valore di setpoint e se è maggiore di esso mi va ad aprire la elettrovalvola “DIL” per diluire l’inchiostro.
Funziona tutto, ma c’è un problema che non riesco a risolvere:
Ogni qual volta che il valore risulta alto si deve aprire l’elettrovalvola “DIL” solo per pochi secondi!
Ho provato con il “Delay” ma mi apre e chiude “DIL” ad intermittenza, in base al tempo impostato, e mi blocca tutto il programma!
Spero in un vostro aiuto!
Grazie e saluti.

Il pilotaggio di DIL va bene che sia nel loop ma devi creare un timer indipendente mediante millis come per il timer tra i 2 sensori hall