]> git.piffa.net Git - sketchbook_andrea/blob - multitasking/millis/loop_array_millis/loop_array_millis.ino
f366f65cd610a66c8afc905801cca9be40ad9172
[sketchbook_andrea] / multitasking / millis / loop_array_millis / loop_array_millis.ino
1 /*
2   For Loop with millis()
3   
4 Blink di un array di led in sucessione,
5 utilizzando millis() per non blocking.
6 L'array puo' contenere un numero arbitrario di led
7 (l'ordine in cui compaiono e' l'ordine in cui brillano).
8
9  Schemi:
10  - http://lab.piffa.net/schemi/8_led_single_res_bb.png
11  - http://lab.piffa.net/schemi/8_led_single_res_schem.png
12
13  http://www.arduino.cc/en/Tutorial/ForLoop
14  */
15
16 byte ledPins[] = {  // Domanda: cosa succede se uso int?
17   2, 3, 4, 5, 6, 7, 8, 9
18 }
19 ; //Array
20
21 long previousMillis ;
22 long interval = 200;
23 byte i = 0;
24
25
26 void setup() {
27   for (int thisPin = 0; thisPin < sizeof(ledPins); thisPin++) {
28     pinMode(ledPins[thisPin], OUTPUT);
29   }
30   previousMillis = millis();
31 }
32
33 void loop() {
34   if (millis() - previousMillis > interval) {
35     previousMillis = millis();
36
37     if ( i < sizeof(ledPins) - 1 ) {
38       // Spegni precedente led
39       digitalWrite(ledPins[i], LOW);
40
41       // Accendi successivo led
42       digitalWrite(ledPins[++i], HIGH);
43     }
44
45     else if  (i == sizeof(ledPins) - 1 )   {
46       // Ultimo caso
47       i = 0;
48       previousMillis = millis();
49       digitalWrite(ledPins[i], HIGH);
50       digitalWrite(ledPins[ sizeof(ledPins) - 1 ], LOW);
51     }
52   }
53 }
54
55
56