]> git.piffa.net Git - sketchbook_andrea/blobdiff - multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino
Clean up multitasking, bottoni con pooling e interrupts
[sketchbook_andrea] / multitasking / BlinkWithoutDelay_2_led / BlinkWithoutDelay_2_led.ino
index fb411e9aea6e0ee0687812c307d794124da7f625..8270177737e26040322f9a1744a390958c6e64cf 100644 (file)
@@ -1,28 +1,19 @@
 /* Blink without Delay - due led
- Turns on and off a light emitting diode(LED) connected to a digital  
- pin, without using the delay() function.  This means that other code
- can run at the same time without being interrupted by the LED code.
- The circuit:
- * LED attached from pin 13 to ground.
- * Note: on most Arduinos, there is already an LED on the board
- that's attached to pin 13, so no hardware is needed for this example.
- created 2005
- by David A. Mellis
- modified 8 Feb 2010
- by Paul Stoffregen
- modified by Andrea Manni
- This example code is in the public domain.
+
+ Utilizziamo la funzione millis() al posto di delay()
+ per poter gestire il lampeggio di un LED senza bloccare
+ il processore.
+
+ Questo esercizio e' strutturato in una serie di passaggi incrementali
+ nei quali una versione minimale si evolve per introdurre
+ programmazione ad oggetti, interrupts, pointers.
+
+Schema: https://lab.piffa.net/schemi/millis_bb.png
+
  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
  */
 
-// constants won't change. Used here to 
+// constants won't change. Used here to
 // set pin numbers:
 const int ledA = 13;      // Primo LED
 const int ledB = 12;      // Secondo LED
@@ -30,58 +21,52 @@ const int ledB = 12;      // Secondo LED
 // Variabbili di stato
 int ledStateA = LOW;             // ledState used to set the LED
 int ledStateB = LOW;             // ledState used to set the LED
-              
-long previousMillisA = 0;        // will store last time LED was updated
-long previousMillisB = 0;        // will store last time LED was updated
 
-// the follow variables is a long because the time, measured in miliseconds,
-// will quickly become a bigger number than can be stored in an int.
+unsigned long previousMillisA = 0;        // Timestamp dell'ultimo aggiornamento
+unsigned long previousMillisB = 0;        // Timestamp dell'ultimo aggiornamento
+
 long intervalA = 1000;           // interval at which to blink (milliseconds)
 long intervalB = 500;            // interval at which to blink (milliseconds)
 
 void setup() {
-  // set the digital pin as output:
-  pinMode(ledA, OUTPUT);      
-  pinMode(ledB, OUTPUT);  
+  pinMode(ledA, OUTPUT);
+  pinMode(ledB, OUTPUT);
 }
 
 void loop()
 {
-// Primo LED
-  if (millis() >= previousMillisA + intervalA) {
+  // Primo LED
+  if (millis() - previousMillisA >= intervalA) {
     // Aggiornimo il riferimento temporale
     previousMillisA += intervalA;
 
-    // if the LED is off turn it on and vice-versa:
+    // Se il LED e' spento accendiamolo e vice-versa:
     if (ledStateA == LOW)
       ledStateA = HIGH;
     else
       ledStateA = LOW;
-    // set the LED with the ledState of the variable:
     digitalWrite(ledA, ledStateA);
   }
-  
-// Secondo LED
-    if (millis() >= previousMillisB + intervalB) {
-    // save the last time you blinked the LED 
-    previousMillisB += intervalB;
 
-    // if the LED is off turn it on and vice-versa:
+  // Secondo LED
+  if (millis() >= previousMillisB + intervalB) {
+    // save the last time you blinked the LED
+    previousMillisB += intervalB;
+    // Se il LED e' spento accendiamolo e vice-versa:
     if (ledStateB == LOW)
       ledStateB = HIGH;
     else
       ledStateB = LOW;
-    // set the LED with the ledState of the variable:
+    // e' possibile semplificare questa operazione?
+    // Hint: lo stato del LED e' binario: ha solo due stati possibili.
+    
     digitalWrite(ledB, ledStateB);
   }
 }
 
 /* Domande
- 1. Provare a isolare il codice per accendere ogni singolo led in una funzione:
-    - Quali variabili determinano il comportamento del LED?
-    - Come cambiano durante il corso dello script?
-    - Sono globali o locali? 
-    - Quali parti vanno eseguite una sola volta e quali a ogni esecuzione?
+ 1. Cercare di semplificare / ripulire il codice.
  */