3 Utilizziamo la funzione millis() al posto di delay()
4 per poter gestire il lampeggio di un LED senza bloccare
7 Questo esercizio e' strutturato in una serie di passaggi incrementali
8 nei quali una versione minimale si evolve per introdurre
9 programmazione ad oggetti, interrupts, pointers.
11 Per vedere direttamente un esempio succinto:
12 - https://lab.piffa.net/sketchbook_andrea/basic/blinks/millis/millis.ino
14 Schema: https://lab.piffa.net/schemi/millis_bb.png
17 - http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
20 const int ledPin = 13;
23 boolean ledState = LOW; // Variabile associata allo stato del LED
24 unsigned long previousMillis = 0; // Timestamp dell'ultimo aggiornamento,
25 // previousMillis dovra' essere di tipo long in quanto deve contenere numeri grandi
26 // e sara' sempre positiva quindi unsigned.
27 const unsigned long interval = 1000; // Intervallo tra un blink e l'altro (milliseconds)
28 // Dato che dovra' essere aggiunta ad altre variabili long e unsigned tanto vale
29 // fare anche interval come quelle
32 pinMode(ledPin, OUTPUT);
37 // Verifichiamo se e' il momento di modificare lo variabile
38 // associata allo stato del LED.
40 if (millis() - previousMillis >= interval) {
41 // Timestamp + timestamp = delta temporale
43 previousMillis = previousMillis + interval ;
44 // Aggiorniamo il contatore previousMillis
46 // Se il LED e' spento accendiamolo e vice-versa:
55 // e' possibile semplificare questa operazione?
56 // Hint: lo stato del LED e' binario: ha solo due stati possibili.
58 // Aggiorniamo lo stato del LED
59 digitalWrite(ledPin, ledState);
64 1. Aggioungere un LED che brilli ogni 500ms: iniziare pensando
65 a quali variabili gestiscono l'attuale LED e a quali si
67 2. E' ora agevole cambiare gli intervalli dei due LED?
68 Modificare gli intervalli dei due led (es 500ms - 320ms)
81 3. Si sarebbe introdotto uno slip (ritardo) nei tempi dello sketch