Ho una parte di codice che, effettuata una operazione, poi va a settare un pin LOW.
L'operazione di cui sopra, normalmente viene eseguita e poi il contatto si deve riaprire subito dopo la sua esecuzione.
Però, c'è una situazione nella quale a seguito lancio dell'operazione, il contatto deve rimanere chiuso per più tempo, dopo che questa è stata eseguita.
Vi chiedo quindi, come risolvo questa situazione? Con un delay(tempo) nel secondo caso, prima di eseguire la chiusura del contatto o c'è un altro modo? Se tempo == 0, questa operazione di delay(0), influenza il codice? Quanto?
Delay(0) non ferma nulla, nel senso che dice solo di aspettare 0 ms per cui il tempo computazionale perso è pari a quello necessario a chiamare la funzione ed a ritornare da essa, infinitesimale.
mi interessava soprattutto capire cosa potesse influire il delay(0) sul codice, visto che verrà sempre eseguito quando condizione non si verifica... ma mi confermi che è assolutamente trascurabile.
Un test su un numero diverso da zero restituisce sempre True, è come fare delayTime!=0
Se invece devi fare un test per avere True quando il numero è pari a 0, basta fare if (!delayTime) { faiqualcosa }
Un test su un numero diverso da zero restituisce sempre True, è come fare delayTime!=0
Se invece devi fare un test per avere True quando il numero è pari a 0, basta fare if (!delayTime) { faiqualcosa }
Nel caso decidessi di usare l'if anzichè far SEMPRE eseguire il delay (anche nel caso di delay(0)), cosa cambia a livello di tempo macchina dedicato a processare la cosa?
L'if è più sbrigativa perché fai un test su una variabile. Chiamando la funzione, devi saltare alla routine del delay, eseguirla a vuoto e tornare indietro.
Sennò un'altra alternativa è fare 2 subroutine: in una ci metti il delay, nell'altra no. E' più dispendioso in termini di consumo di memoria ma così se hai problemi di situazioni time-critical sei a posto
if(!cancel && startTimer) {
if (useTimer1) go(useTimer1Time, PINS_TIMER1);
if (useTimer2) go(useTimer2Time, PINS_TIMER2);
if(timerDelay) delay(timerDelay);
}
non capisco bene come fare le due routine, considerando che il tutto va attivato dal primo if e le due condizioni devono avverarsi indipendentemente dal fatto che io voglia o meno usare un delay.