From: Andrea Manni Date: Mon, 4 May 2015 16:47:46 +0000 (+0200) Subject: multitasking X-Git-Url: http://git.piffa.net/web?a=commitdiff_plain;h=f3ffb63f53d580f0853e6b32c8ec377a7eac67f7;p=sketchbook_andrea multitasking --- diff --git a/multitasking/BlinkWithoutDelay_1/BlinkWithoutDelay_1.ino b/multitasking/BlinkWithoutDelay_1/BlinkWithoutDelay_1.ino index 605947d..5096739 100644 --- a/multitasking/BlinkWithoutDelay_1/BlinkWithoutDelay_1.ino +++ b/multitasking/BlinkWithoutDelay_1/BlinkWithoutDelay_1.ino @@ -65,5 +65,6 @@ void loop() /* Domande 1. Aggioungere un LED che brilli ogni 500ms - 2. E' ora agevole cambiare gli intervalli dei due LED? + 2. E' ora agevole cambiare gli intervalli dei due LED? + Modificare gli intervalli dei due led (es 500ms - 320ms) */ diff --git a/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino b/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino index 293e217..6bad7cd 100644 --- a/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino +++ b/multitasking/BlinkWithoutDelay_2_led/BlinkWithoutDelay_2_led.ino @@ -83,8 +83,10 @@ void loop() /* Domande 1. Provare a isolare il codice per accendere ogni singolo led in una funzione: - Quali variabili determinano il comportamento del LED? - Sono globali o locali? + - 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? */ diff --git a/multitasking/BlinkWithoutDelay_3_funzione/BlinkWithoutDelay_3_funzione.ino b/multitasking/BlinkWithoutDelay_3_funzione/BlinkWithoutDelay_3_funzione.ino index 886dd5e..5f5f2ab 100644 --- a/multitasking/BlinkWithoutDelay_3_funzione/BlinkWithoutDelay_3_funzione.ino +++ b/multitasking/BlinkWithoutDelay_3_funzione/BlinkWithoutDelay_3_funzione.ino @@ -1,16 +1,15 @@ /* Blink without Delay - Soluzione + Blink con funzione + + Soluzione: 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? - 3. Provare a isolare il codice per accendere ogni singolo led in una funzione: - Quali variabili determinano il comportamento del LED? - Sono globali o locali? - */ -// constants won't change. Used here to -// set pin numbers: - ///////////// // First LED int ledA = 13; // the number of the LED pin @@ -42,7 +41,7 @@ void loop() } -// Funzioni +// Funzioni: void lightLedA () { if(millis() - previousMillisA > intervalA) { @@ -78,11 +77,12 @@ void lightLedB () { /* Domande 1. Modificare le funzioni in modo che accettino come parametro - l'intervallo di lampeggio. - + l'intervallo di lampeggio. + */ + diff --git a/multitasking/BlinkWithoutDelay_4_argomento/BlinkWithoutDelay_4_argomento.ino b/multitasking/BlinkWithoutDelay_4_argomento/BlinkWithoutDelay_4_argomento.ino index a6ecbaf..8810f27 100644 --- a/multitasking/BlinkWithoutDelay_4_argomento/BlinkWithoutDelay_4_argomento.ino +++ b/multitasking/BlinkWithoutDelay_4_argomento/BlinkWithoutDelay_4_argomento.ino @@ -68,11 +68,13 @@ void lightLedB (int interval) { /* Approfondimenti - Quali similitudini ci sono tra le due funzioni? -- Come si dovrebbe fare per semplificare il codice - evitando di ripetere larti del codice simile tra loro? - Distinguere i dati comuni tra le due funzioni che ci servono per far lampeggiare i LED - Distinguere i dati che caratterizzano un LED rispetto all'altro +- Provare a integrare le variabili relative ai due LED dentro le + rispettive funzioni. +- Sarebbe possibile scrivere una funzione che possa interagire con un LED qualunque? + ES: Come inpostare il PIN del LED? Come gestire lo stato del LED? */ diff --git a/multitasking/BlinkWithoutDelay_5_cleanup/BlinkWithoutDelay_5_cleanup.ino b/multitasking/BlinkWithoutDelay_5_cleanup/BlinkWithoutDelay_5_cleanup.ino index cc3d0e0..70e9162 100644 --- a/multitasking/BlinkWithoutDelay_5_cleanup/BlinkWithoutDelay_5_cleanup.ino +++ b/multitasking/BlinkWithoutDelay_5_cleanup/BlinkWithoutDelay_5_cleanup.ino @@ -57,10 +57,13 @@ void lightLedB (int interval) { } digitalWrite(ledB, ledStateB); } - +/* Domande: + 1. E' possibile avere una sola funzione che permetta di gestire + qualunque LED io voglia aggiungere? + /* Approfondimenti - - integrazione tra funzioni e dati - - Rapporto tra global scope e uso di pointers + - integrazione tra funzioni e dati: programmazione a oggetti + - Uso di pointers per modificare dati esterni allo scope della funzione - Uso di forme di dati strutturate (array, struct) per scambiare dati tra funzioni e programma */ diff --git a/multitasking/BlinkWithoutDelay_6_class/BlinkWithoutDelay_6_class.ino b/multitasking/BlinkWithoutDelay_6_class/BlinkWithoutDelay_6_class.ino index 6734b14..2744341 100644 --- a/multitasking/BlinkWithoutDelay_6_class/BlinkWithoutDelay_6_class.ino +++ b/multitasking/BlinkWithoutDelay_6_class/BlinkWithoutDelay_6_class.ino @@ -1,9 +1,10 @@ /* Blink without Delay - Soluzione + Class: definizione di una classe LED. - Introdotto un argomento per la funzione che nodifica l'intervallo di lampeggio + L'oggetto LED integra i dati (proprieta') del led con i metodi (le funzioni). */ +// Oggetti: class Lampeggiatore { // Lampeggia un LED utilizzando millis() // Variabili @@ -53,4 +54,9 @@ ledA.Update(); ledB.Update(); } +/* Domande: + 1. Ogni quante volte viene eseguito il codice del loop per ogni millisecondo? + 2. Utilizzare un interrupt per richiamare Update() + Es: https://learn.adafruit.com/multi-tasking-the-arduino-part-2/overview + */ diff --git a/multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino b/multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino index 621083e..61a53b5 100644 --- a/multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino +++ b/multitasking/BlinkWithoutDelay_7_struct/BlinkWithoutDelay_7_struct.ino @@ -21,13 +21,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 ); } diff --git a/multitasking/blink_0_soluzione/blink_0_soluzione.ino b/multitasking/blink_0_soluzione/blink_0_soluzione.ino index 265390e..3a3751a 100644 --- a/multitasking/blink_0_soluzione/blink_0_soluzione.ino +++ b/multitasking/blink_0_soluzione/blink_0_soluzione.ino @@ -1,12 +1,24 @@ /* Blink due LED - Soluzione - + + Aggiungere un secondo LED e farlo brillare ogni 500ms + mentre il primo brilla ogni 1000ms + + a | b + ======== + 1 | 1 + 1 | 0 + 0 | 1 + 0 | 0 + + Periodo = 500ms + */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int ledA = 13; //Primo LED -int ledB = 12; //Secondo LED +int ledB = 12; //Secondo LED, con resistenza // the setup routine runs once when you press reset: void setup() { @@ -20,17 +32,20 @@ void loop() { digitalWrite(ledA, HIGH); // turn the LED on (HIGH is the voltage level) digitalWrite(ledB, HIGH); - delay(500); + delay(500); // Minimo comun denominatore del periodo + //digitalWrite(ledA, HIGH); // ledA non cambia digitalWrite(ledB, LOW); + delay(500); digitalWrite(ledA, LOW); digitalWrite(ledB, HIGH); - - delay(500); + delay(500); + //digitalWrite(ledA, LOW); digitalWrite(ledB, LOW); + delay(500); digitalWrite(ledA, LOW); digitalWrite(ledB, LOW); @@ -52,3 +67,5 @@ void loop() { + + diff --git a/programming/functions/scope_1/scope_1.ino b/programming/functions/scope_1/scope_1.ino index 9662283..8e52430 100644 --- a/programming/functions/scope_1/scope_1.ino +++ b/programming/functions/scope_1/scope_1.ino @@ -10,7 +10,7 @@ */ -boolean sposato = 1 ; +boolean sposato = 1 ; // Variabile globale void setup(){ Serial.begin(9600); }