X-Git-Url: http://git.piffa.net/web?p=sketchbook_andrea;a=blobdiff_plain;f=multitasking%2FBlinkWithoutDelay_2_led%2FBlinkWithoutDelay_2_led.ino;h=8270177737e26040322f9a1744a390958c6e64cf;hp=fb411e9aea6e0ee0687812c307d794124da7f625;hb=e4de8b95aa9b8019b3fff9416918a4840aae46b5;hpb=98f12e9ba20d5b505b1b6506569e31af9ac3ba89 diff --git a/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino b/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino index fb411e9..8270177 100644 --- a/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino +++ b/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino @@ -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. + */