Vorrei realizzare un doppio timer

Questo è l'effetto desiderato come posso procedere? Set of Daktronics BB-2130 Basketball Shot Clocks For Sale - YouTube

Ok, ma facci delle domande concrete. Cosa é che non Ti é chiaro?
Ciao Uwe

Il "timer" direi che è UNO ... casomai sono due i display ... non mi sembra di vedere differenze di tempo tra i due ... ::slight_smile:

Guglielmo

Si ma uno parte da 60 secondi e uno parte da 20 minuti.

Più che altro avevo intenzione di usare un ciclo for ma non so come integrare il secondo timer

Sempre uno è ... cambia il punto di inizio, ma a te sempre lo stesso clock serve e poi, al'avanzare di detto clock, gestisci due (o più) contatori differenti.

Ti consiglio di studiarti come si usa la millis(), prima QUI, poi QUI ed infine leggi anche QUI e QUI ... applicandola correttamente potrai gestire quanti contatori vuoi, anche in modo indipendente.

Guglielmo

Basti che usi una base dei tempi, p.e. la millis(), e una serie di variabili, che fanno da timer, le incrementi ad intervalli regolari con la risoluzione desiderata, p.e. ogni secondo (1000 count della millis() ), in questo modo puoi avere tutti i timer che desideri.
La precisione non è elevata perché la millis() dipende sia dalla precisione del clock del micro che da vari fattori software, però per conteggi di qualche decina di minuti è accettabile.
Se vuoi maggiore precisione, ma anche risoluzione, non influenzata da fattori software, solo dalla precisione del clock di Arduino, con un quarzo decente parliamo di max 100 ppm di errore (circa +/- 10 secondi in 24 ore), puoi usare un timer come base dei tempi utilizzando il suo interrupt per incrementare un contatore che tiene il computo degli overflow, in questo modo puoi avere anche periodi di molte ore nonostante i limite a 8-16 bit, più prescaler, dei timer presenti negli AVR.

Quindi dovrei procedere cosi?

long interval = 1000;        

void setup() {


}
 
void loop()
{
 
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
  
    previousMillis = currentMillis;   
 
    //qui shotclock timer da 24 secondi
  }

//qui timer da 20 minuti
}

Deve essere possibile interrompere shotclock in qualunque momento e farlo ripartire a comando, o inizializzarlo a 24 secondi, mentre l'altro clock prosegue.

Deve essere possibile fermare l'altro clock (da 20 minuti) e farlo ripartire su comando. E quando arriva a 0 bloccare tutto.

Ciao,
P.

e come dovrei procedere?

Se non è solo un balocco direi che dovresti cominciare a preoccuparti del costo del display. Hai già idea di quello che vuoi fare o vuoi solo pilotare piccoli display, magari a 7 segmenti tipo questi?

Poi devi imparare come si pilotano quei display in multiplex; qui trovi del materiale.

Poi puoi cercare di pilotare UN display con UN timer. Implementare con due pulsanti le funzioni: INIZIALIZZA/AZZERA/INIZIALIZZA e CONTA/STOP/CONTA, utilizzando, ovviamente, l'istruzione millis().

Quando sei riuscito a fare questo, pilotare DUE display differenti potrebbe apparirti facile.

Ciao,
P.