Los bloques condicionales permiten evaluar condiciones en una variable, y ejecutar algunas instrucciones en caso de cumplirse o no cumplirse la condición, los bloques condicionales son los if y los switch.
Bloques “if” y “if/else”
Un bloque if sirve para comprobar si una condición determinada es cierta (true) o falsa (false). Si la condición es cierta, se ejecutan una o varias instrucciones. El bloque if/else funciona igual que el if, pero adicionalmente ejecuta una o varias instrucciones cuando la condición no es cierta. La sintaxis para el bloque if es la siguiente:
if (condición) { //Instrucciones que se ejecutan si la condición es cierta –true– }
Y la sintaxis para el bloque if/else será la siguiente:
if (condición) { //Instrucciones que se ejecutan si la condición es cierta –true– } else { //Instrucciones que se ejecutan si la condición es falsa –false– }
El else es opcional, puedes colocarlo o no según lo necesite tu programa. También se puede dar el caso que necesitamos evaluar varias condiciones a la vez, los bloques if se pueden entonces anidar usando la expresión else if, y usando la siguiente sintaxis:
if (condición) { //Instrucciones que se ejecutan si la condición es cierta } else if (otra_condición) { //Instrucciones que se ejecutan si la condición del anterior “if” es falsa pero la actual es cierta } else if (otra_condición) { //Instrucciones que se ejecutan si la condición del anterior “if” es falsa pero la actual es cierta } else { //Instrucciónes que se ejecutan si todas las condiciones anteriores eran falsas }
No existe límite para la cantidad de condiciones que podemos evaluar, ni para el tipo de variable que podemos evaluar, pueden ser números enteros o decimales.
Por otro lado, es bastante probable encontrar en algunos programas expresiones tales como if(mivariable) en vez de if(mivariable!=0), por ejemplo. Es decir, “ifs” que solo incluyen una variable, pero no la condición para evaluarla. Esta forma de escribir los “ifs” es simplemente un atajo: si en el if solo aparece una variable o expresión sin ningún tipo de comparación, es equivalente a comprobar si dicha variable o expresión es “true” (es decir, si es diferente de 0).
Ejemplo de uso de if
float temperatura=100; //Declaro una variable con un valor de 100 boolean alarma=0; //Declaro una variable con un valor de 0 int velocidadBomba=50; //Declara una variable void setup() { Serial.begin(9600); //Inicio la comunicación serial } void loop() { if (Serial.available()>0){ //Consulta si hay datos en buffer de entrada serie temperatura=Serial.parseFloat(); //Lee un numero decimal en el buffer serial y lo guarda en temperatura Serial.print("La temperatura es "); //Imprime el texto en el monitor serie Serial.println(temperatura); //Imprime el valor de la variable if(temperatura<80) Serial.println("Temperatura normal"); //Si la temperatura es normal imprime un mensaje if(temperatura>80&&temperatura<100) { //Si la temperatura sube mas de 80 imprime otro mensaje velocidadBomba=85; //Ajusta la velocidad de la bomba Serial.println("Alerta de temperatura"); } if(temperatura>=100){ //Si la temperatura es mayor que 100 imprime un mensaje alarma=1; //activa una alarma //Activa la alarma Serial.println("Temperatura Alta");//Imprime un mensaje de aviso velocidadBomba=100; //Ajusta la velocidad de la bomba }else { alarma=0; //Desactiva la alarma cuando la temperatura baja de 100 } } }
Bloques “switch”
Una manera válida de hacer comprobaciones de condiciones múltiples, más elegante, cómoda y fácil es utilizar el bloque switch. Su sintaxis es la siguiente:
switch (expresión) { case valor1: //Instrucciones que se ejecutarán cuando “expresión” sea igual a “valor1” break; case valor2: //Instrucciones que se ejecutarán cuando “expresión” sea igual a “valor2” break; //Puede haber los “case” que se deseen, y al final una sección “default” (opcional)// default: //Instrucciones que se ejecutan si no se ha ejecutado ningún “case” anterior }
La única limitación que tiene el switch es que solo se pueden evaluar números enteros, y solo se evalúan las condiciones hasta que una sea cierta.
Ejemplo de uso de un switch
int x; //Declara una variable sin un valor inicial void setup(){ Serial.begin(9600); //inicia la comunicación serial } void loop() { if (Serial.available()>0){ //Consulta si hay datos en buffer de entrada serial x=Serial.parseInt(); //Lee un numero entero en el buffer serial y lo guarda en x switch (x) { //consulto el valor de la variable x case 20: Serial.println("x vale 20 exactamente"); //Imprime un mensaje si el valor de x es 20 break; case 50: Serial.println("x vale 50 exactamente"); //Imprime un mensaje si el valor de x es 50 break; default: Serial.println("x no vale ni 20 ni 50"); //Imprime un mensaje si no se cumplen las condiciones anteriores } } }
Operadores lógicos
Además de los operadores de comparación, en las comparaciones también se pueden utilizar los operadores booleanos (también llamados lógicos), usados para encadenar dos o más comprobaciones dentro de una condición. Estos son los siguientes:
&& | Comprueba que dos condiciones sean ciertas | (Operador AND) |
|| | Comprueba que, al menos, una de dos condiciones sea cierta | (Operador OR) |
! | Comprueba que no se cumpla la condición a la que precede | (Operador NOT) |
Ejercicios
Ejercicio 1: Evaluar el valor de una variable
Realizar un programa que me indique si el valor de una variable es mayor a 10. Para ello vamos a declarar una variable y le daremos un valor cualquiera (por ejemplo 20), luego compararemos el valor de la variable con 10 para saber si esta es mayor, si es mayor se imprimirá en el monitor serie un mensaje indicándolo, y si no lo es también nos lo dirá con un mensaje.
Ejercicio 2: Verificar un número
Usando el monitor serie evaluar si el numero entero introducido es igual, menor o mayor a 22. Se debe recibir un mensaje de respuesta en el monitor serial para cada caso.
Ejercicio 3: Uso de switch
Usando la función switch, verificar usando el monitor serial si el número introducido es igual a 17, 22 o 25, indicándolo mediante un mensaje.
Ejercicio 4: Comparaciones
Usando dos variables, una llamada presión y otra temperatura, hacer un programa que evalúe si la presión es menor a 7.5 y la temperatura mayor a 80, en ese caso mandar una alerta por el monitor serial. Adicionalmente si la presión baja de 3.1 enviar una alarma también por el monitor serial.