Oltre alla millis() dovrai vedere come funzionano gli interrupt, altrimenti perdi impulsi.
Ti servirà usare il pin 2, quindi devi spostare i pin dell'LCD. Esempio
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
poi includi nel setup
attachInterrupt(0, impulso, RISING);
vedi qui --> attachInterrupt() - Arduino Reference
e nelle variabili metti la tua cont come
volatile unsigned long cont = 0;
volatile stato = 0;
non serve che sia float, gli impulsi sono interi e discreti.
Poi devi crearti una funzione impulso() che aumenta il conteggio
void impulso(){
cont++;
stato = 1;
}
dove all'interno aumenti gli impulsi totali e cambi lo stato del LED.
Ora il tuo contatore è indipendente dalle operazioni di scrittura su seriale e su LCD e non perde un colpo (+ o -).
Fatto ciò devi rivedere il codice del loop per calcolare i litri istantanei e il conteggio totale.
void loop() {
reset=digitalRead(9); // assegnazione pin tasto reset
if (reset==1){ // arrivo impulso reset
cont=0; // reset contalitri
lcd.clear(); // reset lcd
}
if(stato==1) {
digitalWrite (8,HIGH); // accensione led esterno
stato=0;
}
else {
digitalWrite (8,LOW); // spegnimento led esterno
}
visual = (float)cont/270.0; // conversione impulsi in litri
lcd.setCursor(0, 0); // posizionamento cursore display
lcd.print("Lt. Tot: "); // scritta
lcd.print(visual,1); // visualizzazione valore litri
lcd.setCursor(0, 1); // posizionamento cursore display
lcd.print("Lt. Min: "); // scritta
lcd.print(litrimin,1); // visualizzazione lt. ora ??????
Serial.println(cont); // visualizzazione impulsi su serial monitor
}