Scegliere con switch
Fa parte della sezione Temporizzazione senza delay del percorso Arduino di Coddy. Lezione 8 di 18.
Quando una variabile può avere diversi valori e ogni valore richiede il proprio codice, una catena di if e else if diventa lunga. switch fa lo stesso lavoro e si legge come un elenco:
switch (zone) {
case 0:
// viene eseguito quando zone è 0
break;
case 1:
// viene eseguito quando zone è 1
break;
default:
// viene eseguito quando nessun case corrisponde (opzionale)
break;
}switch salta al case il cui numero corrisponde e esegue le righe successive. break esce da switch. Se dimentichi un break, la scheda continua a eseguire anche le righe del case successivo: questo fenomeno si chiama fall-through.
Qui la manopola è suddivisa in quattro zone. analogRead() restituisce un valore da 0 a 1023 e dividendo per 256 si ottiene un numero intero: 0 per il quarto inferiore, poi 1, 2 e 3 in quello superiore. Ogni zona mostra il proprio colore sul LED RGB.
Sfida
FacileTrasforma la manopola in un selettore di colori con switch:
- zona 0: rosso (già scritto)
- zona 1: verde
- zona 2: blu
- zona 3: bianco (tutti e tre accesi)
Usa setColor() e termina ogni case con break;. Premi Esegui, gira la manopola, poi Verifica.
Provalo tu
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 11;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
}
void setColor(int red, int green, int blue) {
digitalWrite(redPin, red);
digitalWrite(greenPin, green);
digitalWrite(bluePin, blue);
}
void loop() {
int zone = analogRead(A0) / 256; // 0, 1, 2 or 3
switch (zone) {
case 0:
setColor(HIGH, LOW, LOW); // red
break;
// add zones 1, 2 and 3 here
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Temporizzazione senza delay
2Macchine a stati
Ricordare la modalitàScegliere con switchStati con nome usando enumMacchina a stati del semaforoCambiare modalità con un pulsanteEsercitati da solo: Playground Arduino