5 La funzione lightLed() ora passa un pointer alla posizione di memoria
6 della struttura dati ledA / ledB, non viene fatta una copia di
7 tutto lo struct ledA --> temp per poi far tornare (return(temp))
8 una struttura aggiornate di temp che vera' nuovamente copiata
11 Viene fatta un pass by reference e non un pass by value,
12 vengono usate meno risose di calcolo e meno memoria.
16 // Lampeggia un LED utilizzando millis()
18 int ledPin ; // il numero del LED pin
19 int ledState ; // stato attuale del LED
20 long interval ; // milliseconds di intervallo nel lampeggiare
21 long previousMillis ; //precedente cambio di stato
23 // Instanziamo i due led dalla struttura
30 pinMode(ledA.ledPin, OUTPUT);
31 pinMode(ledB.ledPin, OUTPUT);
36 lightLed(&ledA ); // Viene passato il riferimento (Left value) di ledA
43 void lightLed(struct blinkLed *temp) { // temp ora e' un pointer e non una copia autonoma: pass by reference (not by value)
44 // Si noti che la funzione e' ora void dato che non deve tornare a passare nulla al loop: molto
45 piu' semplice (una sorta di polimorfismo).
47 // Illumina il ledA secondo un intervallo passato come argomento
49 if(millis() - (*temp).previousMillis >= (*temp).interval) { // l'operatore punto ha priorita' maggiore rispetto al pointer asterisco
50 (*temp).previousMillis += (*temp).interval ;
52 // if the LED is off turn it on and vice-versa:
53 temp->ledState = !temp->ledState ; // Forma contratta, deference operator: temp->ledState == (*temp).ledState
55 digitalWrite(temp->ledPin, temp->ledState);
56 //return(temp); // copy by value