]> git.piffa.net Git - sketchbook_andrea/blob - multitasking/BlinkWithoutDelay_1/BlinkWithoutDelay_1.ino
Clean up multitasking, bottoni con pooling e interrupts
[sketchbook_andrea] / multitasking / BlinkWithoutDelay_1 / BlinkWithoutDelay_1.ino
1 /* Blink without Delay
2
3  Utilizziamo la funzione millis() al posto di delay()
4  per poter gestire il lampeggio di un LED senza bloccare
5  il processore.
6
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.
10
11 Per vedere direttamente un esempio succinto:
12 - https://lab.piffa.net/sketchbook_andrea/basic/blinks/millis/millis.ino
13
14 Schema: https://lab.piffa.net/schemi/millis_bb.png
15
16 Tutorial:
17 - http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
18  */
19
20 const int ledPin =  13;
21
22 // Variabili
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
30
31 void setup() {
32   pinMode(ledPin, OUTPUT);
33 }
34
35 void loop()
36 {
37   // Verifichiamo se e' il momento di modificare lo variabile
38   // associata allo stato del LED.
39
40   if (millis() - previousMillis >= interval) {
41     // Timestamp + timestamp = delta temporale
42
43     previousMillis = previousMillis + interval ;
44     // Aggiorniamo il contatore previousMillis
45
46     // Se il LED e' spento accendiamolo e vice-versa:
47     if (ledState == LOW)
48     {
49       ledState = HIGH;
50     }
51     else
52     {
53       ledState = LOW;
54     }
55     // e' possibile semplificare questa operazione?
56     // Hint: lo stato del LED e' binario: ha solo due stati possibili.
57
58     // Aggiorniamo lo stato del LED
59     digitalWrite(ledPin, ledState);
60   }
61 }
62
63 /* Domande
64    1. Aggioungere un LED che brilli ogni 500ms: iniziare pensando
65       a quali variabili gestiscono l'attuale LED e a quali si
66       dovranno aggiungere.
67    2. E' ora agevole cambiare gli intervalli dei due LED?
68       Modificare gli intervalli dei due led (es 500ms - 320ms)
69 .
70 .
71 .
72 .
73 .
74 .
75 .
76 .
77 .
78 .
79 .
80    Risposta
81    3. Si sarebbe introdotto uno slip (ritardo) nei tempi dello sketch
82
83  */