X-Git-Url: http://git.piffa.net/web?a=blobdiff_plain;f=multitasking%2FBlinkWithoutDelay_2_led%2FBlinkWithoutDelay_2_led.ino;h=8270177737e26040322f9a1744a390958c6e64cf;hb=e4de8b95aa9b8019b3fff9416918a4840aae46b5;hp=6bad7cd3bd535279974dc2cd0fa44e08c2f1a2ec;hpb=f3ffb63f53d580f0853e6b32c8ec377a7eac67f7;p=sketchbook_andrea diff --git a/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino b/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino index 6bad7cd..8270177 100644 --- a/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino +++ b/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino @@ -1,92 +1,72 @@ /* 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 eaman - - 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; // the number of the LED pin -int ledB = 12; //Secondo LED +const int ledA = 13; // Primo LED +const int ledB = 12; // Secondo LED -// Variables will change: +// 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 +unsigned long previousMillisA = 0; // Timestamp dell'ultimo aggiornamento +unsigned long previousMillisB = 0; // Timestamp dell'ultimo aggiornamento -// 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 intervalA = 1000; // interval at which to blink (milliseconds) -long intervalB = 500; // 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() { - // here is where you'd put code that needs to be running all the time. + // Primo LED + if (millis() - previousMillisA >= intervalA) { + // Aggiornimo il riferimento temporale + previousMillisA += intervalA; - // 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. - - if(millis() - previousMillisA > intervalA) { - // save the last time you blinked the LED - previousMillisA = millis(); - - // 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); } - - if(millis() - previousMillisB > intervalB) { - // save the last time you blinked the LED - previousMillisB = millis(); - // 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. + */