Saltar la navegación

Programación I: Condicionales y Bucles

1. Introducción y objetivos

En este tema, aprenderemos qué son las sentencias condicionales y los bucles y como puedo programarlos con Bitbloq. Seremos capaces de leer los valores que le llegan a nuestra placa desde los sensores y veremos cómo pueden ayudarnos los diagramas de flujo a entender la estructura de un programa.
Los objetivos que se pretenden conseguir son:
▶ Conocer las sentencias condicionales simples y su aplicación.
▶ Aprender a realizar algoritmos y diagramas de flujo.
▶ Conocer los distintos tipos de bucles y sus diferencias.
▶ Aprender a mostrar valores a través del puerto serie.

2. Las sentencias condicionales

En una sentencia condicional nos planteamos una pregunta para actuar de una forma u otra según la respuesta a la misma. Por ejemplo, si llueve, abrimos el
paraguas. Si por el contrario no llueve, lo cerramos. Si hace frío, nos ponemos el abrigo. Si hace calor, nos lo quitamos. Si es de noche, encendemos una luz. Si por el contrario es de día, la apagamos.
Para programar un condicional en Bitbloq utilizaremos los bloques de programación que se encuentran en la categoría de Control de la pestaña Bloques.
La pregunta que vamos a plantear la construimos con el bloque Si y, para las distintas respuestas o condiciones, completamos con los bloques en cambio si o de lo contrario:
▶ Utilizamos el bloque en cambio si para programar que se comprueben varias condiciones.
▶ Utilizamos el bloque de lo contrario para indicar que, si no se cumple la condición o condiciones, se ejecute otra acción o acciones.

Figura 24. Bloques condicionales.

Estos dos bloques podemos encontrarlos tanto en la categoría de Control como en las sugerencias que aparecen al pulsar la bombilla que se muestra cuando situamos el cursor en la parte inferior del bloque Si.

Figura 25. Bombilla de sugerencias en el bloquecondicional Si.

3. Encender un LED al pulsar un botón

Empezamos practicando las instrucciones condicionales con un reto: encender un LED cuando pulsamos un botón.
Nuestro programa tendrá las siguientes partes:
▶ si pulso el botón, el LED se encenderá
▶ si dejo de pulsar el botón, el LED se apagará.
Comenzamos, colocando en la pestaña Hardware los componentes que necesitamos:

● Placa controladora
● Botón
● LED                                     

   Figura 26. Componentes LED y Botón conectados a la placa controladora Zum Core.

Pasamos a la pestaña Bloques y situamos el bloque Si de la categoría de Control, pestaña Básicos, en el Bucle principal. Rellenamos los huecos vacíos con el bloque
Leer botón de la categoría de Componentes y el bloque Verdadero/Falso (categoría Lógica) o el bloque número (categoría Matemáticas) que nos van a indicar los
estados del botón (recordemos que estamos utilizando un sensor digital):
▶ Para la condición de botón pulsado utilizaremos “1” ó “Verdadero”.
▶ Para la condición de botón no pulsado utilizaremos “0” ó “Falso”.

En nuestro caso queremos que el LED se encienda si pulsamos el botón, por tanto igualamos la lectura del botón a “1” ó “Verdadero”.

Figura 27. Bloque condicional para botón pulsado.

Dentro del bloque Si colocamos el bloque con la acción que queremos que ocurra, en este caso Encender el LED. Y a continuación situamos un de lo contrario, para que cuando no se cumpla esta condición el LED se apague. El programa quedaría de la siguiente manera:

Figura 28. Programa encender/apagar un LED con un botón.

Recuerda que nuestra placa controladora nunca hace nada que no le hayamos dicho. Debemos programar todo lo que queramos que haga. Si solo programamos
que cuando el botón esté pulsado el LED se encienda y no le decimos cuándo debe apagarse, el LED nunca se apagará.

4. Lámpara nocturna con sensor de luz

Vamos a ver otro reto en el que tengamos que utilizar las sentencias condicionales: realizar una lámpara inteligente que encienda un LED cuando esté oscureciendo.
Nuestro programa tendrá las siguientes partes:
- si el sensor de luz detecta que está oscureciendo, el LED se encenderá
- si el sensor de luz detecta que hay suficiente luminosidad, el LED se apagará.
Ya hemos visto cómo utilizar las sentencias condicionales con un sensor digital, el botón, por lo que vamos a practicarlas ahora con un sensor analógico, el sensor de luz.
Empezamos colocando en la pestaña Hardware los componentes que necesitamos:
● Placa controladora Zum Core
● Sensor de luz
● LED

Figura 29. Componentes LED y Sensor de luz conectados a la placa controladora Zum Core.

Recordamos que el sensor de luz es un elemento analógico, por lo que debemos conectarlo en la ristra de pines analógicos, haciendo coincidir los colores de su cable con el de los pines.
Pasamos a la pestaña Bloques y volvemos a utilizar las sentencias condicionales de la categoría de Control. En este caso debemos elegir un valor de cantidad de luz, de forma que cuando el sensor de luz detecte valores inferiores a este (simulamos noche), el LED se encienda, y cuando los valores sean superiores (simulamos día), el LED se apague. Teniendo en cuenta el rango del sensor de luz (0 - 800 aproximadamente), elegiremos un valor de 200 (este valor lo podemos ajustar
después según el entorno donde nos encontremos).
El programa quedaría entonces de la siguiente manera:

Figura 30. Programa control LED mediante Sensor de luz.

IMPORTANTE. Debemos cerciorarnos de que colocamos el símbolo de comparación correcto en el bloque Si. En este caso hemos usado la comparativa menor que (<). Si mantenemos la igualdad (=) sería un error en este caso, ya que es muy complicado conseguir un valor fijo o constante en la medida del sensor de luz. Recordemos que, al situar esta programación en el apartado del Bucle principal (Loop), la placa está revisando, indefinidamente, el valor que le está llegando de este sensor.

5. Algoritmos y diagramas de flujo

En los anteriores apartados, nos hemos enfrentado a diferentes retos y hemos tenido que ir analizando cómo podríamos solucionarlos paso a paso. En
programación, cada vez que nos enfrentamos a un problema nos va a ser de mucha utilidad plantearnos preguntas que nos ayuden a obtener unas instrucciones claras, del tipo: ¿qué tengo que hacer? y ¿cómo puedo hacerlo? Estas instrucciones son lo que llamamos un algoritmo.
Un algoritmo es un conjunto de instrucciones muy concretas que hay que seguir en orden para realizar una tarea, como por ejemplo seguir paso a paso una receta de cocina, un manual de instrucciones, poner una lavadora, etc.
Una forma sencilla de representar estos algoritmos es mediante diagramas de flujo, que nos ayudan a visualizar de forma gráfica un proceso.
Los símbolos fundamentales para construir diagramas de flujo son:

Representa el inicio y el final del proceso.

Representa el proceso o acción que se ejecuta a partir de unos datos, que pueden ser de entrada, salida o resultado de algún proceso anterior.

Representa los datos de entrada y los datos de salida.

Representa una condición o pregunta que puede tener varios caminos: si/no, verdadero/falso, mayor que/menor que, igual a/diferente a, etc.

Indican el sentido de los procesos.

Tabla 3. Elementos de un diagrama de flujo.

Estos símbolos podemos encontrarlos en las categorías del lateral derecho, los cuales tienen su equivalente de tipo bloque.

Figura 31. Pestaña Diagramas.

A la derecha podemos encontrar las diferentes categorías de símbolos, que a su vez
están divididas en pestañas (Junior, Básicos y Avanzados).
En la sección central de la interfaz encontraremos el Área de creación de diagramas subdividido en en tres secciones al igual que en la pestaña Bloques.
En la parte inferior de la pantalla está el Área de configuración del símbolo, que aparece cuando seleccionamos un símbolo con el ratón y permite establecer o
modificar diferentes atributos.
Para el caso del reto encender un LED al pulsar un botón, el diagrama de flujo que representa el algoritmo es el siguiente:

Figura 32. Diagrama de flujo del algoritmo encender un LED al pulsar un Botón.

Es una buena práctica desarrollar el diagrama de flujo de los ejercicios que propongamos antes de programarlos. Les ayudará a simplificar el problema y les resultará más sencilla su resolución.

6. El bucle Repetir

Un bucle es una parte del programa que se repite mientras se cumpla una condición.
El bucle Repetir se encuentra en la categoría de Control y, como su nombre indica, repite una serie de acciones el número de veces que le indiquemos.

Figura 33. Bloque Repetir.

Por ejemplo, si queremos que al pulsar el botón el LED parpadee 5 veces, podemos incluir este bucle. Este sería el resultado:

Figura 34. Programa ejemplo repetición de acciones con el bloque Repetir.

7. El bucle Mientras (While)

Como hemos comentado antes, un bucle es una parte del programa que se repite
mientras se cumpla una condición. El bucle Mientras o While repite una serie de
acciones mientras una condición sea verdadera. Por ejemplo, mientras llueva no
saldremos a la calle y leeremos un buen libro. Cuando la condición deja de ser
verdadera, el programa sale del bucle y continúa con la siguiente instrucción.
La estructura del bloque Mientras es muy similar a la del bloque condicional Si. La diferencia en este caso es que cuando la condición sea verdadera, la programación permanecerá en ese bucle Mientras, realizando las instrucciones que se han introducido en él y paralizando el Bucle principal, hasta que la condición deje de cumplirse. En el caso del bloque Si, cuando la condición se cumpla, se realizarán las instrucciones, saldrá del bloque Si y continuará con la siguiente instrucción que haya dentro del Bucle principal.

Vamos a ver otro reto con el que practicaremos esta instrucción: una alarma que nos avise si se ha fundido una bombilla de una zona que queremos tener siempre iluminada en nuestra casa.
Analizamos el problema y vemos que queremos que, mientras la luminosidad de la habitación sea inferior a un cierto nivel, nuestra alarma no deje de sonar.
Empezamos colocando en la pestaña Hardware los componentes que necesitamos:
● Placa controladora
● Sensor de luz
● Zumbador

Figura 35. Componentes Zumbador y Sensor de luz conectados a la placa controladora Zum Core.

Pasamos a la pestaña Bloques y vamos a colocar el bloque Mientras de la categoría de Control en el Bucle principal. Para rellenar el bloque, elegimos un valor de
cantidad de luz que nos informe de que no es la luminosidad suficiente, en este caso pondremos el valor de 100. Si la condición se cumple haremos que el zumbador
suene con la nota Do durante 500 milisegundos (0,5 segundos). Este bloque lo podemos encontrar en la categoría de Componentes.

A continuación, ponemos una espera de otros 500 ms con el bloque Esperar de la categoría de Control, simulando así un sonido intermitente, como el de una alarma.

Figura 36. Ejemplo con el bucle Mientras.

8. Mostrar valores por monitor puerto serie

El monitor puerto serie es el medio que tiene la placa controladora para comunicarse con otro aparato como el ordenador. Es muy útil para comprobar el
valor que le está llegando a la placa de un sensor, de una variable, etc. Esto nos ayudará a delimitar mejor nuestros valores en las condiciones o bucles que
programamos y corregir y entender los posibles errores de un programa.
Para usar el monitor puerto serie con el ordenador debemos mantener conectada la placa controladora mediante el cable USB. En la pestaña Hardware seleccionamos el componente USB serie y lo arrastramos a la parte gris que rodea la placa, se conectará automáticamente al puerto USB de esta. El baudrate es la cantidad de información que se transmite en un segundo y se mide en baudios (bits/segundo).
Utilizaremos el baudrate que aparece por defecto: 9600 baudios.

Figura 37. Componente USB serie conectado a la placa controladora Zum Core.

Nuestro primer ejemplo va a consistir en mostrar un mensaje por pantalla. Para ello, en la pestaña Bloques, en la categoría Componentes, encontramos los bloques de comunicación: Recibir, Recibir número y Enviar. Elegimos el bloque Enviar y lo situamos en el apartado Bucle principal (Loop). Seleccionamos la opción USB_serie
en el desplegable y dejamos la opción Con salto de línea para mostrar los mensajes en líneas diferentes. En caso de que queramos que nos los muestre en la misma
línea, elegiremos Sin salto de línea en el desplegable.

Figura 38. Bloque enviar por monitor puerto serie.

A continuación, añadimos el bloque “Texto” de la categoría Texto y escribimos en el mensaje que queremos mostrar, en este caso ¡Hola mundo!
Situaremos después un bloque Esperar para visualizar el mensaje cada segundo.

Figura 39. Ejemplo de envío de mensaje por monitor puerto serie.

Cargamos el programa en la placa y, a continuación, hacemos clic en Ver y seleccionamos Monitor Puerto Serie.

Figura 40. Mostrar el Monitor Puerto Serie.

Se abrirá una ventana nueva donde aparecerá el mensaje que hemos escrito, con una cadencia de 1 segundo. Puedes cambiar a la opción de Sin salto de línea para
visualizar un mensaje seguido del otro, pero es importante que, si vas a realizar un cambio en la programación, primeramente, cierres el Monitor Puerto Serie, a
continuación cargues el programa y, una vez cargado a la placa, vuelvas a abrir el Monitor Puerto Serie.
Al igual que hemos hecho con el mensaje de texto, podemos mandar la lectura de cualquier sensor a través del Monitor puerto serie.

Leer el valor de un sensor con Placa Zum Core
Vamos a leer los valores que el sensor de luz está enviando a la placa. Colocamos en la pestaña Hardware los elementos necesarios:
● Placa controladora
● USB_serie
● Sensor de luz

Figura 41. Componentes USB serie y sensor de luz conectados a la placa controladora Zum Core.

En la pestaña Bloques, en la categoría Componentes, Básicos, elegimos el bloque Enviar y lo situamos en el apartado Bucle principal (Loop). Seleccionamos la opción
USB_serie en el desplegable y dejamos la opción Con salto de línea para mostrar los mensajes en líneas diferentes.
A continuación, añadimos el bloque Leer sensor_de_luz de la categoría Componentes.
Situaremos después un bloque Esperar para visualizar el mensaje cada segundo.

Figura 42. Ejemplo de leer el valor de un sensor.

Para poder ver los valores, como hemos comentado antes, cargamos el programa en la placa y, a continuación, hacemos clic en Ver y Mostrar Monitor Puerto Serie.

Figura 43. Valores del Sensor de luz en el Monitor Serie.