Sembra che funzioni
//funzione cronometro
void cronometro(){
//
// Controlo se già sto contando o no ...
//
if ( fStoContando) {
//
// Si, sto già contando, aggiorno solo il display ...
//
secses = (millis() - startmillis) / 1000; // secondi della sessione
secc = secses + secp; // aggiunge eventuali secondi di sessione precedente
hrsc = secc / 3600;
secc = secc - ((unsigned long) hrsc * 3600UL);
minc = secc / 60;
secc = secc - (minc * 60);
// Aggiorna durante il conteggio la seconda riga del display
lcd.setCursor(7,1);
if (hrsc < 10) lcd.print(" ");
lcd.print(hrsc);
lcd.print(":");
if (minc < 10) lcd.print("0");
lcd.print(minc);
lcd.print(":");
if (secc < 10) lcd.print("0");
lcd.print(secc);
}
else {
//
// No, non sto contando quindi ... verifico la pressione del bottone Start ...
//
val = digitalRead(start);
if (val == LOW) {
delay(75); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
val = digitalRead(start);
if (val == LOW) {
startmillis = millis();
secp = 0; // con pulsante start resetta
fStoContando = true; // ... si segna che ha iniziato a contare
// Visualizza sul display l'ora a cui è partito ...
secSt = secs;
hrsSt = hrs;
minSt = mins;
//
lcd.setCursor(7,2);
if (hrsSt < 10) lcd.print(" ");
lcd.print(hrsSt);
lcd.print(":");
if (minSt < 10) lcd.print("0");
lcd.print(minSt);
lcd.print(":");
if (secSt < 10) lcd.print("0");
lcd.print(secSt);
lcd.setCursor(0,3);
lcd.print (" !!! start !!! ");
}
}
}
//
// Controlla se premuto Stop
val = digitalRead(stopp);
if (val == LOW) {
delay(75); // <<<<<<<<<<<<<<<< si può provare ad abbassarlo
val = digitalRead(stopp);
if (val == LOW) {
if ( fStoContando) {
fStoContando = false; // ... si segna che ha terminato di contare
secp = secp + secses; // cumula la sessione finita
lcd.setCursor(0,3);
lcd.print (" !!! stop !!! ");
digitalWrite (led, LOW); // spegni led
//
}
else { fStoContando = true;
startmillis = millis();
lcd.setCursor(0,3);
lcd.print (" !!! start !!! ");
}
}
}
}