Conteggio litri al minuto per contalitri digitale

Aiuto!!! Mi rendo conto che sono proprio alle prime armi.... forse sto cercando di fare qualcosa che ancora non mi compete... però ho bisogno di sviluppare questa applicazione.
Alcune cose del primo codice che mi ha inviato Paolo non le ho capite bene e non ha capito se devo integrarle insieme a quelle inviate nella seconda parte. Io sono arrivato a fare questo, mi sembrava potesse funzionare, il display indica qualche numero che varia soffiando nel contalitri ma poi ad esempio rimane con dei numeri fissi anche quando il contalitri è fermo. Ecco il codice:

// Contalitri con display e visualizzazione totale litri
// con tasto per azzeramento e visualizzazione portata (lt/min.)

// Libreria display
#include <LiquidCrystal.h>

//Variabili
int x=0;
float cont=0;
int stato=0;
int reset=0;
float litrimin=0;
float visual=0;
volatile byte impulse;
unsigned long timeold;

// Iniziazione libreria con numeri pin
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);        // set numero colonne e righe display
  pinMode (7,INPUT);       // impulso da contalitri
  pinMode (8,OUTPUT);      // led esterno
  pinMode (9,INPUT);       // pulsante reset conteggio litri
  Serial.begin(9600);      // apertura porta seriale
  timeold=millis();
}

void loop() {
  reset=digitalRead(9);    // assegnazione pin tasto reset
  if (reset==1){           // arrivo impulso reset
    cont=0;                // reset contalitri
    lcd.clear();           // reset lcd
  }
  x=digitalRead(7);        // variabile impulso da contalitri
  if(x==HIGH) {            // arrivo impulso contalitri
    digitalWrite (8,HIGH); // accensione led esterno
    if(stato==0) {         // conteggia solo se ritorna l'impulso
      cont=(cont+1);       // conteggio impulsi
      stato=1;             // cambio stato per verifica ritonro impulso
      impulse++;
    }
  }
  else {
    digitalWrite (8,LOW);  // spegnimento led esterno
    stato=0;               // cambio stato per verifica ritorno impulso
  }
  if (impulse >= 27) {
    impulse=0;
    litrimin=27.0/270.0*60.0*1000.0/(float) (millis()-timeold);
    timeold=millis();
  }
  visual=cont/270;         // conversione impulsi in litri
  lcd.setCursor(0, 0);     // posizionamento cursore display
  lcd.print("Lt. Tot: ");  // scritta
  lcd.print(visual);       // visualizzazione valore litri
  lcd.setCursor(0, 1);     // posizionamento cursore display
  lcd.print("Lt. Min: ");  // scritta
  lcd.print(litrimin);     // visualizzazione lt. ora
  Serial.println(cont);    // visualizzazione impulsi su serial monitor
}

Se c'è qualche buon'anima che sistema il codice e lo mette per intero mi fa un immenso piacere, così poi leggendolo riesco a capire bene il funzionamento globale...
Comunque grazie ancora a tutti per l'aiuto.