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 struttur
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 struttura autonoma: pass by reference (not by value)
44 // Illumina il ledA secondo un intervallo passato come argomento
46 if(millis() - (*temp).previousMillis > (*temp).interval) { // l'operatore punto ha priorita' maggiore rispetto al pointer asterisco
47 (*temp).previousMillis = millis();
49 // if the LED is off turn it on and vice-versa:
50 temp->ledState = !temp->ledState ; // Forma contratta, deference operator: temp->ledState == (*temp).ledState
52 digitalWrite(temp->ledPin, temp->ledState);
53 //return(temp); // copy by value