Menu
CoddyTech

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.

challenge icon

Sfida

Facile

Trasforma 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
  }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Temporizzazione senza delay

Esercitati da solo: Playground Arduino