]> git.piffa.net Git - sketchbook_andrea/blobdiff - multitasking/BlinkWithoutDelay_8_struct_pointer/BlinkWithoutDelay_8_struct_pointer.ino
Clean up multitasking, bottoni con pooling e interrupts
[sketchbook_andrea] / multitasking / BlinkWithoutDelay_8_struct_pointer / BlinkWithoutDelay_8_struct_pointer.ino
index 635642d50afe9f299189304c9ac547add9affa55..9e36670b9b65bbe63cd7714500b168b3e6067699 100644 (file)
@@ -20,7 +20,7 @@ struct blinkLed {
   long interval ;        // milliseconds di intervallo nel lampeggiare
   long previousMillis ;  //precedente cambio di stato  
 };
-// Instanziamo i due led dalla struttur 
+// Instanziamo i due led dalla struttura
 blinkLed ledA = {
   13 , LOW , 1000, 0 };
 blinkLed ledB = {
@@ -40,11 +40,14 @@ void loop()
 ////////////////
 // Funzioni
 
-void lightLed(struct blinkLed *temp) { // temp ora e' un pointer e non una struttura autonoma: pass by reference (not by value)
+void lightLed(struct blinkLed *temp) { // temp ora e' un pointer e non una copia autonoma: pass by reference (not by value)
+// Si noti che la funzione e' ora void dato che non deve tornare a passare nulla al loop: molto
+piu' semplice (una sorta di polimorfismo).
+  
   // Illumina il ledA secondo un intervallo passato come argomento
 
-  if(millis() - (*temp).previousMillis > (*temp).interval) { // l'operatore punto ha priorita' maggiore rispetto al pointer asterisco
-    (*temp).previousMillis = millis();   
+  if(millis() - (*temp).previousMillis >= (*temp).interval) { // l'operatore punto ha priorita' maggiore rispetto al pointer asterisco
+    (*temp).previousMillis += (*temp).interval ;
 
     // if the LED is off turn it on and vice-versa:
     temp->ledState = !temp->ledState ; // Forma contratta, deference operator: temp->ledState == (*temp).ledState