]> git.piffa.net Git - sketchbook_andrea/blob - multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino
Clean up multitasking, bottoni con pooling e interrupts
[sketchbook_andrea] / multitasking / BlinkWithoutDelay_2_led / BlinkWithoutDelay_2_led.ino
1 /* Blink without Delay - due led
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 Schema: https://lab.piffa.net/schemi/millis_bb.png
12
13  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
14  */
15
16 // constants won't change. Used here to
17 // set pin numbers:
18 const int ledA = 13;      // Primo LED
19 const int ledB = 12;      // Secondo LED
20
21 // Variabbili di stato
22 int ledStateA = LOW;             // ledState used to set the LED
23 int ledStateB = LOW;             // ledState used to set the LED
24
25 unsigned long previousMillisA = 0;        // Timestamp dell'ultimo aggiornamento
26 unsigned long previousMillisB = 0;        // Timestamp dell'ultimo aggiornamento
27
28 long intervalA = 1000;           // interval at which to blink (milliseconds)
29 long intervalB = 500;            // interval at which to blink (milliseconds)
30
31 void setup() {
32   pinMode(ledA, OUTPUT);
33   pinMode(ledB, OUTPUT);
34 }
35
36 void loop()
37 {
38   // Primo LED
39   if (millis() - previousMillisA >= intervalA) {
40     // Aggiornimo il riferimento temporale
41     previousMillisA += intervalA;
42
43     // Se il LED e' spento accendiamolo e vice-versa:
44     if (ledStateA == LOW)
45       ledStateA = HIGH;
46     else
47       ledStateA = LOW;
48     digitalWrite(ledA, ledStateA);
49   }
50
51   // Secondo LED
52   if (millis() >= previousMillisB + intervalB) {
53     // save the last time you blinked the LED
54     previousMillisB += intervalB;
55     // Se il LED e' spento accendiamolo e vice-versa:
56     if (ledStateB == LOW)
57       ledStateB = HIGH;
58     else
59       ledStateB = LOW;
60     // e' possibile semplificare questa operazione?
61     // Hint: lo stato del LED e' binario: ha solo due stati possibili.
62     
63     digitalWrite(ledB, ledStateB);
64   }
65 }
66
67 /* Domande
68  1. Cercare di semplificare / ripulire il codice.
69  
70  */
71
72
73