/* 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)
*/
/* 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?
*/
/* 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
}
-// Funzioni
+// Funzioni:
void lightLedA () {
if(millis() - previousMillisA > intervalA) {
/* Domande
1. Modificare le funzioni in modo che accettino come parametro
- l'intervallo di lampeggio.
-
+ l'intervallo di lampeggio.
+
*/
+
/* 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?
*/
}
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
*/
/* 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
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
+ */
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 );
}
/*
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() {
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);
+
+
*/
-boolean sposato = 1 ;
+boolean sposato = 1 ; // Variabile globale
void setup(){
Serial.begin(9600);
}