Descrición:
switch() … case e if … else if … else son estruturas de control que permiten elixir entre varios camiños para executar diferentes procesos excluíntes entre si.
É útil cando hai moitas posibilidades, pois permite facer unha serie de comparacións sen necesidade de aniñar moitas estruturas if… else.
Exemplo: Se a variable toma o valor1 execútase o proceso 1, se toma o valor 2 execútase o proceso 2 e se non se cumpre ningunha das anteriores condicións (default) execútase o proceso 3.
| switch() … case | if … else if … else | |
switch(variable) {
case 1:
// proceso1
break;
case 2:
// proceso2
break;
default:
// proceso3
break;
}
|
if (variable ==1){
// proceso1
}
else if(variable==2){
// proceso 2
}
else{
// proceso3
}
|
Imos utilizala para que, segundo sexa o número de veces que premamos nun pulsador, se acendan diferentes LEDs.
Montaxe:
Utilizaremos a seguinte montaxe: Conectaremos 3 LEDs con resistencias de 220Ω aos pins 11, 12 e 13, e un pulsador con resistencia de 10k ao pin 2.

Programas:
Imos facer que cada vez que premamos nun pulsador unha variable aumente de valor, desde 0 ata 3. Segundo o valor que colla, executamos procesos diferentes.
1. if ... else if ... else
Neste exemplo utilizamos utilizamos if … else if … else para establecer as diferentes opcións
// Declaración de variables
int led1=13;
int led2=12;
int led3=11;
int pulsador1=2;
int opcion=0; // variable para elixir os diferentes casos
// Configuración
void setup(){
Serial.begin(9600); // Inicia a comunicación serie
pinMode(led1, OUTPUT); // Configuramos o LED como saída
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
// Programa
void loop(){
if (digitalRead(pulsador1) == HIGH){ // Cando prememos o pulsador1
while((digitalRead(pulsador1) == HIGH)); // Agardamos a soltalo
delay(20); // 0,02s para evitar o efecto rebote
opcion++; // sumamos 1 á variable opción
if(opcion==4){ // cando vale 4 poñemos a 0
opcion=0;
}
}
if (opcion==1){ // Segundo sexa o valor de opcion executamos un proceso diferente.
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
}
else if(opcion==2){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
}
else if(opcion==3){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
}
else{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
}
Serial.println(opcion);
delay (100);
}
2. switch() ... case
Neste exemplo utilizamos switch … case para establecer as diferentes opcións
// Declaración de variables
int led1=13;
int led2=12;
int led3=11;
int pulsador1=2;
int opcion=0; // variable para elixir os diferentes casos
// Configuración:
void setup(){
Serial.begin(9600); // Inicia a comunicación serie
pinMode(led1, OUTPUT); // Configuramos o LED como saída
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
// Programa
void loop(){
if (digitalRead(pulsador1) == HIGH){ // Cando prememos o pulsador1
while((digitalRead(pulsador1) == HIGH)); // Agardamos a soltalo
delay(20); // 0,02s para evitar o efecto rebote
opcion++; // sumamos 1 á variable opción
if(opcion==4){ // cando vale 4 poñemos a 0
opcion=0;
}
}
switch(opcion){ // Segundo sexa o valor da variable opcion (1,2 ou default)
// Executamos un proceso diferente.
case 1:
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
break;
case 2:
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
break;
case 3:
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
break;
default:
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
break;
}
Serial.println(opcion);
delay (100);
}
Propostas:
- Máis estados: Fai un programa con 6 casos diferentes, engadindo novos procesos (os LEDs escintilan, acéndense dun en un, etc.)
