]> git.piffa.net Git - sketchbook_andrea/blobdiff - 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
index 621083ede47f4896e2b9d56789892295fb34ccbf..6f7517d00e697318334a4866b37cd7193f7ffef9 100644 (file)
@@ -1,7 +1,17 @@
 /* Blink without Delay
- Soluzione
  
- Introdotto un argomento per la funzione che nodifica l'intervallo di lampeggio 
+Raggruppamento delle proprieta' dell'oggetto in uno struct.
+Una funzione accetta e restituisce uno struct di questo tipo
+facendo una "copy by value" (vedi esercizio con i pointers per
+una "copy by reference").
+
+Questo e' un esercizio avanzato: propedeutico a capire le basi
+della programmazione a oggetti (suggerimento: 
+https://lab.piffa.net/sketchbook_andrea/RGB_LED/
+
+e' piu' semplice dato che non usa pointers e references
+non dovendo modificare in modo permanente nessuna variabile
+dello struct).
  */
 
 struct blinkLed {
@@ -21,13 +31,13 @@ blinkLed ledB = {
   12, LOW, 500, 0};
 
 void setup() {
-  pinMode(ledA.ledPin, OUTPUT);
+  pinMode(ledA.ledPin, OUTPUT); // Domanda: integrare l'impostazione del LED nel codice della funzione.
   pinMode(ledB.ledPin, OUTPUT);
 }
 
 void loop()
 {
- ledA = lightLed(ledA );
+ ledA = lightLed(ledA ); // Aggiorna lo stato del LED in base all'esecuzione della funzione
  ledB = lightLed(ledB );
 }
 
@@ -37,9 +47,9 @@ void loop()
 struct blinkLed lightLed(struct blinkLed temp) { // dataType tipo_di_struct nome_funzione(argomenti)
   // Illumina il ledA secondo un intervallo passato come argomento
 
-  if(millis() - temp.previousMillis > temp.interval) { // gli elementi dello struct sono accessibili tramite l'operatore [punto]
+  if (millis() - temp.previousMillis >= temp.interval) { // gli elementi dello struct sono accessibili tramite l'operatore [punto]
     // save the last time you blinked the LED 
-    temp.previousMillis = millis();   
+    temp.previousMillis += temp.interval ;
 
     // if the LED is off turn it on and vice-versa:
     temp.ledState = !temp.ledState ; // Inverti il LED