]> git.piffa.net Git - sketchbook_andrea/blob - multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino
Clean up multitasking, bottoni con pooling e interrupts
[sketchbook_andrea] / multitasking / BlinkWithoutDelay_7_struct / BlinkWithoutDelay_7_struct.ino
1 /* Blink without Delay
2  
3 Raggruppamento delle proprieta' dell'oggetto in uno struct.
4 Una funzione accetta e restituisce uno struct di questo tipo
5 facendo una "copy by value" (vedi esercizio con i pointers per
6 una "copy by reference").
7
8 Questo e' un esercizio avanzato: propedeutico a capire le basi
9 della programmazione a oggetti (suggerimento: 
10 https://lab.piffa.net/sketchbook_andrea/RGB_LED/
11
12 e' piu' semplice dato che non usa pointers e references
13 non dovendo modificare in modo permanente nessuna variabile
14 dello struct).
15  */
16
17 struct blinkLed {
18   // Lampeggia un LED utilizzando millis()
19   // Variabili
20   int ledPin ;           // il numero del LED pin
21   int ledState ;         // stato attuale del LED
22   long interval ;        // milliseconds di intervallo nel lampeggiare
23   long previousMillis ;  //precedente cambio di stato  
24
25 ;
26
27 // Instanziamo i due led dalla classe 
28 blinkLed ledA = {
29   13 , LOW , 1000, 0 };
30 blinkLed ledB = {
31   12, LOW, 500, 0};
32
33 void setup() {
34   pinMode(ledA.ledPin, OUTPUT); // Domanda: integrare l'impostazione del LED nel codice della funzione.
35   pinMode(ledB.ledPin, OUTPUT);
36 }
37
38 void loop()
39 {
40  ledA = lightLed(ledA ); // Aggiorna lo stato del LED in base all'esecuzione della funzione
41  ledB = lightLed(ledB );
42 }
43
44 ////////////////
45 // Funzioni
46
47 struct blinkLed lightLed(struct blinkLed temp) { // dataType tipo_di_struct nome_funzione(argomenti)
48   // Illumina il ledA secondo un intervallo passato come argomento
49
50   if (millis() - temp.previousMillis >= temp.interval) { // gli elementi dello struct sono accessibili tramite l'operatore [punto]
51     // save the last time you blinked the LED 
52     temp.previousMillis += temp.interval ;
53
54     // if the LED is off turn it on and vice-versa:
55     temp.ledState = !temp.ledState ; // Inverti il LED
56   }
57   digitalWrite(temp.ledPin, temp.ledState);
58   return(temp); // copy by value
59 }
60
61
62