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?
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
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.