]> git.piffa.net Git - sketchbook_andrea/blob - multitasking/millis/loop_array_millis_obj/loop_array_millis_obj.ino
Well this kinda works
[sketchbook_andrea] / multitasking / millis / loop_array_millis_obj / loop_array_millis_obj.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 OOP version.
10
11  Schemi:
12  - http://lab.piffa.net/schemi/8_led_single_res_bb.png
13  - http://lab.piffa.net/schemi/8_led_single_res_schem.png
14
15  http://www.arduino.cc/en/Tutorial/ForLoop
16  */
17
18
19 class Sequenza {
20     // Lampeggia LED in sequenza utilizzando millis()
21     unsigned long previousMillis ;
22     byte i = 0;
23     byte *ledPins;
24     byte size;
25     long interval;
26     
27   public:
28     Sequenza (byte passed[], byte dim) {
29        ledPins = passed ;
30        size = dim ;
31       for (int thisPin = 0; thisPin < size; thisPin++) {
32         pinMode(ledPins[thisPin], OUTPUT);
33       }
34       previousMillis = millis();
35       digitalWrite(ledPins[0], HIGH);
36     }
37
38     void Update(long value) {
39       interval = value;
40       if (millis() - previousMillis >= interval) {
41         previousMillis = millis();
42
43         if ( i < size - 1 ) {
44           // Spegni precedente led
45           digitalWrite(ledPins[i], LOW);
46
47           // Accendi successivo led
48           digitalWrite(ledPins[++i], HIGH);
49         }
50
51         else if  (i == size - 1 )   {
52           // Ultimo caso
53           i = 0;
54           previousMillis = millis();
55           digitalWrite(ledPins[i], HIGH);
56           digitalWrite(ledPins[ size - 1 ], LOW);
57         }
58       }
59     }
60 };
61
62
63
64 void setup() {
65   Serial.begin(9600);
66   //Serial.print(seq.ledPins);
67 };
68
69 byte pins[] = {  
70   2, 3, 4, 5, 6, 7
71 }; 
72
73 Sequenza seq = Sequenza(pins,sizeof(pins));
74
75
76 void loop() {
77   seq.Update(200);
78 };
79
80
81