]> git.piffa.net Git - sketchbook_andrea/blobdiff - multitasking/BlinkWithoutDelay_1/BlinkWithoutDelay_1.ino
Clean up multitasking, bottoni con pooling e interrupts
[sketchbook_andrea] / multitasking / BlinkWithoutDelay_1 / BlinkWithoutDelay_1.ino
index bbed9dedd3b116e04186cfde7313345da97d3fdf..cd1a4cf9c85fad37ceae36ad6ca38bd32bf84b6e 100644 (file)
@@ -1,69 +1,83 @@
 /* Blink without Delay
- 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
- This example code is in the public domain.
 
- http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
- */
+ 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.
+
+Per vedere direttamente un esempio succinto:
+- https://lab.piffa.net/sketchbook_andrea/basic/blinks/millis/millis.ino
+
+Schema: https://lab.piffa.net/schemi/millis_bb.png
 
-// constants won't change. Used here to 
-// set pin numbers:
-const int ledPin =  13;      // the number of the LED pin
+Tutorial:
+- http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
+ */
 
-// Variables will change:
-int ledState = LOW;             // ledState used to set the LED
-long previousMillis = 0;        // will store last time LED was updated
+const int ledPin =  13;
 
-// 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.
-long interval = 1000;           // interval at which to blink (milliseconds)
+// Variabili
+boolean ledState = LOW;    // Variabile associata allo stato del LED
+unsigned long previousMillis = 0;  // Timestamp dell'ultimo aggiornamento,
+// previousMillis dovra' essere di tipo long in quanto deve contenere numeri grandi
+// e sara' sempre positiva quindi unsigned.
+const unsigned long interval = 1000;  // Intervallo tra un blink e l'altro (milliseconds)
+// Dato che dovra' essere aggiunta ad altre variabili long e unsigned tanto vale
+// fare anche interval come quelle
 
 void setup() {
-  // set the digital pin as output:
-  pinMode(ledPin, OUTPUT);      
+  pinMode(ledPin, OUTPUT);
 }
 
 void loop()
 {
-  // here is where you'd put code that needs to be running all the time.
+  // Verifichiamo se e' il momento di modificare lo variabile
+  // associata allo stato del LED.
+
+  if (millis() - previousMillis >= interval) {
+    // Timestamp + timestamp = delta temporale
 
-  // check to see if it's time to blink the LED; that is, if the 
-  // difference between the current time and last time you blinked 
-  // the LED is bigger than the interval at which you want to 
-  // blink the LED.
-  unsigned long currentMillis = millis();
-  if(currentMillis - previousMillis > interval) {
-    // save the last time you blinked the LED 
-    previousMillis = currentMillis;   
+    previousMillis = previousMillis + interval ;
+    // Aggiorniamo il contatore previousMillis
 
-    // if the LED is off turn it on and vice-versa:
+    // Se il LED e' spento accendiamolo e vice-versa:
     if (ledState == LOW)
+    {
       ledState = HIGH;
+    }
     else
+    {
       ledState = LOW;
+    }
+    // e' possibile semplificare questa operazione?
+    // Hint: lo stato del LED e' binario: ha solo due stati possibili.
 
-    // set the LED with the ledState of the variable:
+    // Aggiorniamo lo stato del LED
     digitalWrite(ledPin, ledState);
   }
 }
 
 /* Domande
-   1. Aggioungere un LED che brilli ogni 500ms
-   2. E' possibile cambiare gli intervalli dei due LED?
-   */
+   1. Aggioungere un LED che brilli ogni 500ms: iniziare pensando
+      a quali variabili gestiscono l'attuale LED e a quali si
+      dovranno aggiungere.
+   2. E' ora agevole cambiare gli intervalli dei due LED?
+      Modificare gli intervalli dei due led (es 500ms - 320ms)
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+.
+   Risposta
+   3. Si sarebbe introdotto uno slip (ritardo) nei tempi dello sketch
+
+ */