Temporizzatori Multipli

Salve,

ho necessità di gestire dei temporizzatori multipli con arduino mega.

Vi spiego nel dettaglio:

Se una fotocellula viene attivata bisogna attivare un temporizzatore che allo scadere del tempo (qualche millisecondo) aziona un relè.

Il problema è che ho 20 fotocellule (indipendenti) che devono attivare 20 temporizzatori indipendenti.

I temporizzatori vorrei implementarli esclusivamente tramite software usando funzioni di arduino o librerie

Si può fare?

Potete darmi qualche spunto?

Grazie infinite

Buon divertimento con millis() e micros() :).

Ciao ti ringrazio per la risposta.

Il problema è che devo poter chiamare queste funzioni in parallelo e in modo indipendente.

Mi spiego meglio:
1)la fotocellula A viene attivata, parte il temporizzatore A
2)dopo pochi istanti anche la fotocellula B viene attivata e con lei il suo temporizzatore

Come faccio a gestire i due timer in modo indipendente e non in modo sequenziale?

Non ho trovato nulla in merito

Guarda nella mia firma, ti porta a un post in cui cerco di spiegare come si usa millis(). micros() si può usare allo stesso modo.

Ti ringrazio molto!

Non credevo che la funzione millis() funzionasse in questo modo!
Credevo fosse come la delay()!
Grazie mille, davvero gentile!

Io nel passato avevo aperto un post su timer multipli:

http://forum.arduino.cc/index.php?topic=236954.0

Riferendomi al post, non prendere in considerazione quel "delay(100);" messo all'inizio del "void loop" serve solo per semplificare lo schetch.
Nella versione reale ho inserito un millis().

Comunque, viste le finalità del mio progetto, io mi accontentavo di ritardi con valore nell'unità di decimi secondo.
Visti i tempi da te richiesti (pochi millisecondi) nutro dei dubbi che Arduino riesca a gestire 20 timer contemporaneamente.

Se una fotocellula viene attivata bisogna attivare un temporizzatore che allo scadere del tempo (qualche millisecondo)

cosa devi attivare in cosi poco tempo dopo il rilevamento?
dipende quanti di questi lavorano o possono intervenire in simultanea, se è questione di 500 milli ciascuno si puà fare un controllo ciclico, si dovrebbe riuscire a starci dentro, io lo feci per 40 pin ma il minimo era 1 secondo di ritardo

Grazie mille lelebum: ho letto con interesse!

Pablos: i temporizzatori devono essere impostati su 200 ms: devo comandare delle lame che allo scadere di questo tempo tagliano la porzione di segmento entrato nei 200 ms.

Cercando di immaginare le tue esigenze, vedo di darti qualche indicazione sull'uso della mia routine riferita al post citato dal mio inervento:

  • Appena entra il materiale nella macchina lo sketch dovrebbe caricare nel timer[0] il valore per ottenere un ritardo di 200ms.

  • Una volta trascorso il tempo, sarà la routine Tmr() in automatico che andrà a richiamare "void Sub0()" dove lo sketch andrà a comandare il taglio.

  • Per eventuale arresto dell'automatismo basta porre a "0" timer[0].

Pur certo dell'affidabilità della mia routine, resto molto scettico sull'uso nella tua applicazione, sia per il numero di timer richiesti che per i tempi.

Date le limitate esigenze della mia applicazione, avevo previsto di interrogare Tmr() ogni 100ms e comunque eventuali ritardi non davno alcun problema.

Nel tuo caso invece ritengo dovresti stringere i tempi a livello di 1ms corrispondenti a 1000 chiamate al secondo di Tmr() che a sua volta interrogherebbe 20 timer.

Ammesso la cosa possa funzionare, comunque otteresti un errore stimato 1% circa. Ipotizzando il taglio del materiale di un metro potresti ottenere 1cm. di errore.

Anche se la strada la vedo piuttosto in salita l'unica alternativa è utilizzare timer/contatore hardware, magari inizializzati di volta in volta via da Arduino.