Múltiples casos

fluxo_cond5

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.

3leds2pulsadores_fritzing

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:

  1. Máis estados: Fai un programa con 6 casos diferentes, engadindo novos procesos (os LEDs escintilan, acéndense dun en un, etc.)

Deixa un comentario