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.)