switch...case

Al igual que las instrucciones if, switch ... case controla el flujo del programa permitiendo que los programas especifiquen un código diferente que debe ser ejecutado en distintas condiciones. En particular, una sentencia switch compara el valor de una variable con los valores especificados en las instrucciones case. Cuando se encuentra una sentencia case cuyo valor coincide con el de la variable, el código de esa declaración case se ejecuta.
La palabra reservada break interrumpe la sentencia switch, y se usa normalmente al final de cada declaración case. Sin una declaración de interrupción, la sentencia switch continuará la ejecución de las siguientes expresiones hasta que se alcanza una interrupción o hasta el final de la sentencia switch.

 

Ejemplo

switch (var)
{
  case 1
    //hace algo cuando var es igual a 1
  break

  case
2
    //hace algo cuando var es igual a 2
  break

  default:
    //si nada coincide, hace lo predeterminado
    // default es optional
  break
}

Sintaxis

switch (var)
{
  case label
    // instrucciones
  break;

  case label:
    // instrucciones
  break;

  default:
    // instrucciones
  break;
}

Parametros

var: la variable cuyo valor es comparado en los distintos case.
label: el valor a comparar con la variable  

14 comentarios:

  1. Hola.
    Quiero hacer una comparativa y usar el swith-case para ello, pero me da error al compilar. ¿Se puede poner una expresión en vez de un valor de variable, >90, <10?. Por ejemplo, para poner un texto en el LCD y el número alineado al borde derecho:

    switch (Velocidad)
    {
        case > 99:
    lcd.print("Velocidad "); // muestra mesaje en primera fila
          break;
        case < 10:
    lcd.print("Velocidad "); // muestra mesaje en primera fila
          break;
        default:
          lcd.print("Velocidad "); // muestra mesaje en primera fila
        break;
    }

    Gracias
    mb162900@gmail.com

    ResponderEliminar
    Respuestas
    1. int Velocidad;
      switch (Velocidad)
      {
      case Velocidad > 99:
      lcd.print("Velocidad "); // muestra mesaje en primera fila
      break;
      case Velocidad < 10:
      lcd.print("Velocidad "); // muestra mesaje en primera fila
      break;
      default:
      lcd.print("Velocidad "); // muestra mesaje en primera fila
      break;
      }

      Eliminar
  2. En el comentario anterior, al publicar, se han perdido la diferencia de espacios en las cadenas y solo muestra "Velocidad "

    ResponderEliminar
  3. Hola, he visto en otros compiladores que un case puede ser dos variables usando && o ||, funciona por ejemplo si quieres que entre en ese caso si se cumple un u otro valor. saben como se puede hacer en arduino?

    ResponderEliminar
    Respuestas
    1. http://www.arduino.utfsm.cl/referencia/if-y-comparadores/ en esta pagina esta lo que buscas bien explicado...

      Eliminar
  4. buen día. estoy haciendo un programa de control de banda con arduino. los motores deben girar en un sentido y luego dependiendo de las condiciones de entrada giraran hacia el otro.
    El punto es que los motores giran hacia un lado y luego cuando cambian las condiciones,no puedo salir del else final...pueden ayudarme? gracias..
    adjunto la sección de código


    } // llave de while

    } // LA LLAVE QUE CIERRA digital read
    else{ // seria para apagar los motores
    analogWrite(3,0);
    digitalWrite(0, HIGH);
    digitalWrite(4, LOW);
    lcd.setCursor(0,1);
    lcd.print("motors off");
    delay(1000);
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("me quedo");
    delay(1000);

    }

    ResponderEliminar
  5. como puedo hacer un programa de arduino que al pulsar 3 veces el switch que en 5 segundos prende el led y se apague en 5 segundos????

    ResponderEliminar
  6. CUANTOS SELECT CASE PUEDO HACER NECESITO HACER UN DICCIONARIO DE 250 A 500 PALABRAS ALGUIEN PODRIA DECIRME, YA QUE LLEGO AL CASE NUMERO 9, Y DEL 10 EN ADELANTE NO FUNCIONA, SALUDOS....

    ResponderEliminar
  7. buena noche si por favor me pueden colaborar con el código tengo el arduino nano o uno y una micro sd quiero que se reproduzca un determinado sonido dependiendo de la entrada que este en alto por ejemplo
    sonido A con pin 3
    sonido B con pin 4
    sonido C con pin 5
    muchas gracias

    ResponderEliminar
  8. Gracias por su trabajo. Exposicion concisa y calara.
    Solo le sugeriria que la lista de la derecha estubiese ordenada alfabeticamente, seria aún de mas ayuda.
    GRACIAS.

    ResponderEliminar
  9. hola a todos no creo que reciba respuesta ahora pero puede ayudar a alguien en el futuro, como puedo hacer el codigo para que el servo gire en un angulo determinado al escribir una letra especifica en la consola?

    ResponderEliminar
  10. void loop()
    {
    if (Serial.available()>0)
    {
    char option = Serial.read();

    if (option >= '1' && option <= '9')
    {

    option -='0';
    switch (option)
    {
    case 1:

    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 64); //CONTROLAMOS LA VELOCIDAD
    delay(500);

    break;

    case 2:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 128);
    delay(500);
    break;

    case 3:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 192);
    delay(500);
    break;

    case 4:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    analogWrite(ENA, 255);
    delay(500);
    break;

    case 5:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 64);
    delay(500);
    break;

    case 6:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 128);
    delay(500);
    break;

    case 7:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 192);
    delay(500);
    break;

    case 8:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 255);
    delay(500);
    break;


    case 9:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    analogWrite(ENA, 0);
    delay(500);
    break;
    }
    }
    }
    }

    ResponderEliminar
  11. Buenas tardes quisiera saber que codigo poner para que un motor paso a paso haga giros en sentido horario y antihorario

    ResponderEliminar