multi Timer contatori

Ciao a tutti,
stavo sperimentando su un mio sketch 5 contatori perchè ognuno deve controllare determinate cose con tempi diversi ed effettuare differenti azioni.
Siccome è un progetto in cui la scheda Arduino Mega sarà sempre collegata vorrei evitare di utilizzare millis perchè come saprete meglio di me ha un limite di 49,7 giorni dopo i quali va in overflow.
Ho visto diverse librerie tra cui secTimer che sembrava facesse al caso mio ma stoppando un timer stoppa tutti gli altri.
La mia domanda è: qualcuno di voi saprebbe implementare più timer senza il pericolo di overflow (o con qualche escamotage) ?

Grazie a tutti,
Fabrizio

Benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

Dopo che avrai fatto quanto chiesto ....

... beh, sarà il caso che ti studii come si usa la millis(), prima QUI, poi QUI ed infine leggi anche QUI e QUI ... perché hai le idee confuse :wink:

Guglielmo

Ciao,
intanto grazie della risposta. Mi sono presentato sul forum e devo dire che tutte le pagine che mi hai segnalato le avevo già lette. Di solito, mi documento molto, prima di scrivere su un forum. In tutte le pagine si parla di millis per non usare i delay ma il funzionamento banale di millis lo avevo già capito.
Siccome nell'articolo di Leo sull'overflow non mi era ben chiara la soluzione, e siccome lo stesso leo ha creato una libreria secTimer che evitava l'overflow e sarebbe durata 136 anni, mi chiedevo se ci fosse una soluzione già implementata con qualche libreria per gestire gli oggetti Timer e non operazioni macchinose di sottrazioni e addizioni con i valori di millis e altre variabili di appoggio.
Approfondirò comunque ancora.

Grazie

Le cose che devi controllare che periodicità hanno ? Perché è solo quella che conta, null'altro !

Se hai periodi più lunghi dei 49 gg. allora devi usare altri trucchi/librerie, altrimenti ... millis() è più che sufficiente.

Guglielmo

Se hai letto quegli articoli, la soluzione è a portata di mano.

Le operazioni da eseguire sono semplicissime:
millis() ti fornisce il valore corrente
inizio lo imposti all'inizio dell'intervallo
durata è la durata dell'intervallo
nel loop verifichi con un if se sono trascorsi "durata millisecondi dall'inizio"

se riesci a farlo con un solo intervallo, l'estensione a più intervalli è immediata.

Invece di usare uno solo valore di inizio ed un solo valore di durata, utilizzerai diversi valori
inizio1 inizio2 ....
durata1 durata2 ....
nel loop metterai un if per ognuno invece di un solo if.

Con l'accorgimento indicato da Leo per le condizioni degli if rendi inoffensivi gli overflow, dichiara come unsigned long le variabili coinvolte ed è fatto.

Piccolo suggerimento:
inizia con un solo intervallo e fai lampeggiare un LED, se hai dubbi metti qui il codice che stai usando e ti aiuteremo.
Poi estendi a due LED con due intervalli diversi.
Poi passa a tre e così via.