Ce l'ho fatta!!! Almeno credo... So che il codice è un po incasinato e bruttino e probabilmente ci sono cento modi migliori per fare la stessa cosa però sembra funzionare, per ora sto provando solo soffiando nel contalitri poi proverò a collegarlo all'acqua e vedere se i litri al minuto sono reali...
Comunque sono ripartito dal mio codice iniziale ed il ragionamento che ho fatto è stato di usare la milli() in modo che ogni secondo mi venga rilevata la quantità di impulsi dalla turbina, a quel punto ho gli impulsi al secondo, moltiplico x 60 = impulsi al minuto, moltiplico x 0,0037'37 (quantità acqua passata per ogni impulso) e ottengo i litri al minuto.
Sembra corretto, che ne dite? Accetto suggerimenti e critiche sul codice che vi riporto:
// 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 contlt=0;
int contltprint=0;
int stato=0;
int reset=0;
float litrimin=0;
float visual=0;
unsigned long tprec=0;
unsigned long tcorr;
unsigned long aggiorn=1000;
// 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
}
void loop() {
tcorr=millis();
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
contlt++; // variabile che conta impulsi in tot. tempo
stato=1; // cambio stato per verifica ritonro impulso
}
}
else {
digitalWrite (8,LOW); // spegnimento led esterno
stato=0; // cambio stato per verifica ritorno impulso
}
if (tcorr-tprec>aggiorn) { // se passa un secondo...
tprec=tcorr; // aggiorna variabile tempo prec.
contltprint=contlt; // assegna alla variabile gli impulsi fatti in un secondo
contlt=0; // resetta per prossimo conteggio -dopo un secondo-
}
visual=cont/270; // conversione impulsi in litri
litrimin=contltprint*60*0.0037037; // converti impulsi al secondo in lt/min
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(contltprint); // visualizzazione impulsi al secondo su serial monitor
}
Grazie, buona serata!