Nei precedenti esempi, per attendere il tempo necessario ad accendere o spegnere un Led abbiamo usato l'istruzione 'delay(tempo in millisecondi)', però questa, quando avviata, blocca tutti i processi in atto e quindi impedisce ad altri Led di accendersi/spegnersi durante questo intervallo di tempo. Ad esempio, se il microcontrollore sta eseguendo l'istruzione delay(5000), in questi 5 secondi, non sarà possibile pilotare l'accensione o lo spegnimento di un secondo led o far funzionare altri utilizzatori. Per tale sua caratteristica, delay () viene inclusa tra le istruzioni "bloccanti".
E' pertanto necessario ricorrere ad un'altra strategia, ovvero di pilotare due o più led facendo dei controlli sullo scorrere del tempo. Per farlo utilizzeremo l'istruzione 'millis()' utile a memorizzare in una variabile intera il tempo trascorso, misurato in millisecondi, da quando è stato caricato lo sketch nel microcontrollore, o da quando è stato premuto il tasto 'reset' (situato vicino al luogo in cui colleghiamo il cavo ad Arduino), che ha la funzione di riavvire lo sketch e quindi anche di azzerare 'millis()'.
Questa istruzione 'millis()' possiamo memorizzarla all'interno di alcune variabili, che nel nostro caso possiamo denominarle 'tempoCorrente' e ' temoPrecedente', verificare se tempoCorrente - tempoPrecedente risulta >= (maggiore o uguale) dell'intervallo scelto ed, in tal caso, imponiamo il cambiamento dello stato del Led, da acceso a spento o da spento ad acceso. Per questa queste variabili, che contengono numeri che crescono rapidamente (di 1000 unità ogni secondo), conviene usare il tipo 'unsigned long' che può contenere numeri positivi (unsigned) compresi tra 0 e 4.294.967.295.
Si faccia attenzione alla nuova istruzione if ......... introdotta nello sketch. questa consente di controllare se il contenuto di una variabile soddisfa alcune caratteristiche. Se le soddisfa esegue le istruzioni racchiuse all'interno delle sue {....} altrimenti non le esegue e passa alle istruzioni seguenti.
Si presenta in genere nella forma:
if (variabile soddisfa proprietà) {
istruzioni da eseguire
.....
.....
}
nel caso specifico nostro si presenterà in questo modo:
if ((tempoCorrente1 - tempoPrecedente1) >= intervallo1) {
tempoPrecedente1 = tempoCorrente1;
statoLed1 = !statoLed1;
}
e lo stesso per il Led 2.
Questo è lo sketch, da leggere attentamente e trascrivere nell'IDE di Arduino per poi mandarlo in esecuzione, riconrdandosi in inserire due Led sulla breadboard con le rispettive resistenze di 220 o 330 Ohm e collegate dal loro filamento lungo alle porte 4 ed 8 e da quello corto alla linea GND della breadboard, a sua volta collegata alla GND della scheda Arduino.
OSSERVAZIONE IMPORTANTE: volendo inserire le parentesi graffe si deve usare la combinazione di tasti alt gr + shift + [
altrimenti, tenendo premuto il tasto alt, digitare il numero 123 per { o 125 per }.