Sentencia de iteración while

En esta lección aprenderás a codificar  la sentencia  iterativa que permite repetir instrucciones  siempre y cuando se cumpla con una condición para hacerlo, utilizando la sentencia while.

En la  lección anterior aprendimos a programar la estructura de iteración  for,  que nos ayuda a  repetir un número específico  de veces una serie de acciones.  ¿Qué pasa cuando no sabemos el número de repeticiones que hacer?  Existe un bucle que realiza repeticiones siempre y cuando se cumpla  cierto  evento.

while

La estructura while repite las acciones del cuerpo de un bucle  mientras se cumple una determinada condición.

El diagrama de flujo de la sentencia while se muestra en la siguiente figura:

Figura 1. Diagrama de flujo de la sentencia while

Como muestra el diagrama de la Figura 1, cuando se ejecuta  la sentencia while,  se evalúa una condición  (expresión booleana). Si el resultado de la evaluación es verdadera, se  ejecuta  el cuerpo del bucle, al terminar vuelve a evaluar la condición. Esta acción se repite tantas veces como la condición sea verdadera, cuando es falsa, no se ejecuta el bucle.

La sintaxis de la sentencia while es la siguiente:

while (condition) {
// instrucciones
}

Parámetros

condición – Cualquier expresión relacional o lógica.

instrucciones  –  La  operación o conjunto de operaciones que se van a realizar.

Vamos a ver el uso de la sentencia while  con el siguiente ejemplo:

Se desea programar un circuito electrónico que  activa un buzzer mientras  se presiona  un botón. Cuando se deja de presionar el botón, el buzzer deja de sonar. El botón está conectado en el pin 3 y el buzzer está conectado al pin 8 (ver Figura 2).

Figura 2. Conexión de un botón al pin 3 y un zumbador al pin 8 de la tarjeta Arduino UNO

En este circuito,  el buzzer funciona como  los timbres de las casas,   mientras presionas el botón el  timbre suena, cuando dejas de presionar el botón, el timbre deja de sonar.  Un buzzer es un dispositivo que permite convertir una señal eléctrica en una onda de sonido. Vamos a revisar las funciones que permiten realizar tales acciones:

Función tone

Genera en el pin que se le indica un sonido mediante una señal de frecuencia (en Hz).

Sintaxis

tone(pin, frecuencia);

Parámetros

pin –  número de pin del Arduino que se quiere configurar.

frecuencia – la frecuencia del tono en hercios. Tipos de datos permitidos: unsigned int.

Ejemplo:

Para generar un tono de la frecuencia 300 Hz en el pin 3 sería:

tone (3,300); // Genera un sonido en el pin 3 de 300 Hz

Tone va generar el sonido hasta que se detenga con la funcion noTone()

Función noTone

Detiene el sonido generado por la funcion tone ().  

Sintaxis

noTone(pin);

Parámetros

pin – pin de Arduino en el que se desea dejar de generar el tono.

Ejemplo:

noTone (3); // Detiene el sonido emitido por el pin 3

Para realizar el código del circuito de la figura 3,  comenzamos declarando las variables que se van a utilizar:

  • pinBoton de tipo entero para manejar el pin 3 que conecta al botón 
  • pinBuzzer de tipo entero para manejar el pin 8 al que esta conectado el  buzzer.
  • valBtn como entero y valor 0 que es la variable que ayuda a guardar el valor del botón.

Las declaraciones de las variables serían las siguientes:

int pinBoton=3; //declara variable pinBoton e inicializa con el valor 3 del pin
int pinBuzzer=8; //declara variable pinBuzzer e inicializa con el valor 8 del pin
int valBtn=0; // declara e inicializa variable valBtn

Hacemos las configuraciones en la función setup (), como el botón va a enviar a la tarjeta Arduino dos valores: HIGH (1) si está presionado y LOW (0) cuando dejen de presionarlo,  se configura el pin 3 como entrada:

pinMode(pinBoton, INPUT); //Configura el pin 3(botón) como entrada

La tarjeta Arduino enviará información para que el buzzer emita un sonido, debemos declarar el pin que va a utilizar como salida:

 pinMode(pinBuzzer,OUTPUT); //Configura el pin 8(buzzer) como salida

El código de la función loop () comienza con la lectura del estado del botón y lo guardamos en la variable valBtn con la función digitalRead():

valBtn=digitalRead(pinBoton); // Lee valor del botón y lo guarda en valBtn

Con el valor almacenado en la variable valBtn, construimos la condición de la sentencia while para comprobar si entra al ciclo de repeticiones :

while (valBtn==HIGH) // mientras el valor de valBtn  sea verdadero (HIGH)

Si la condición se cumple, entra en el bucle y repite las siguientes instrucciones:

  1. hace sonar el buzzer  con la frecuencia 300.
  2. vuelve a leer el estado del botón. 
while (valBtn==HIGH) // mientras el valor de valBtn sea verdadero (HIGH) 
{

tone
(pinBuzzer, 300); // Activa sonido del zumbador con la frecuencia 300
valBtn=digitalRead(pinBoton); // Lee el estado del boton y lo guarda en valBton
} // fin while

Como esta constantemente leyendo el estado del botón, cuando se deje de presionar la lectura que hace la tarjeta Arduino es un valor  LOW, que se almacena en la variable valBton. Al ser evaluada la condición como falsa, no entra al ciclo y ejecuta  la siguiente instrucción del bucle:

noTone(pinBuzzer);

Manos a la obra

Armando Circuitos

Ahora que ya conoces la sintaxis de la sentencia while para codificar repeticiones mientras una condición sea verdadera, vamos a realizar una práctica que consiste en la construcción y programación de un circuito electrónico que haga sonar un zumbador mientras  permanezca presionado un botón.

 

Materiales

Los materiales que necesitas para realizar la práctica son:

Si deseas repasar las características técnicas y funcionamiento de alguno de los componentes electrónicos, puedes dar clic sobre su imagen para consultar su información. 

Construcción del circuito electrónico

Realiza las conexiones del circuito electrónico que se muestra en el diagrama esquemático de la Figura 3. 

 

Figura 3 Diagrama esquemático del circuito electrónico para hacer sonar un buzzer con un botón pulsador

Programación del circuito

/* Manual de programación con Arduino
* Práctica: Sentencia de iteración while
* Objetivo: Programa que hace sonar un buzzer con un botón
* Fecha: diciembre 2020
* Autor: Milagros Pacheco Castañeda
*/

int
pinBoton=3; //Declara variable pinBoton e inicializa con el valor 3 del pin
int pinBuzzer=8; //Declara variable pinBuzzer e inicializa con el valor 8 del pin
int valBtn=0; // Declara e inicializa variable valBtn

void setup()
{

pinMode(pinBoton, INPUT); //Configura el pin 3 (boton) como entrada
pinMode(pinBuzzer,OUTPUT); //Configura el pin 8(buzzer) como salida
}
void loop() {
valBtn=digitalRead(pinBoton); // Lee valor del botón y lo guarda en valBtn
while (valBtn==HIGH) // Mientras el valor de valBtn sea verdadero (HIGH)
{

tone
(pinBuzzer, 300); // Activa sonido del zumbador con la frecuencia 300
valBtn=digitalRead(pinBoton); // Lee el estado del botón y lo guarda en valBton
} // fin while
noTone(pinBuzzer);
}

Observa que el valor devuelto por la función digitalRead(pinBtn) se almacena en la variable valBtn. Este valor, es usado en la sentencia while para determinar si el valor que envía la tarjeta Arduino a través del pin 3  es un HIGH-encendido y reproduce el sonido, si  es un  LOW-apagado, termina el ciclo y apaga el buzzer.

Compila, depura y sube el sketch a la tarjeta Arduino UNO. 

Funcionamiento del circuito electrónico

Prueba el funcionamiento de tu circuito electrónico. Verifica que el circuito funcione como la simulación que se muestra a continuación. Presiona el botón Iniciar simulación y da un clic sostenido sobre el botón para simular que lo presionas y observa cómo el buzzer emite un  sonido mientras presionas el botón y lo apaga cuando dejas de presionarlo. 

Si en tu navegador no se muestra la simulación, ingresa al enlace https://www.tinkercad.com/embed/3gX99MeIasG?editbtn=1

 

logo-autoevaluación

Autoevaluación

para aprender más

Para aprender más

Valero A. (2025) El bucle while y el pulsador. España. DIWO. http://diwo.bq.com/el-bucle-while-y-el-pulsador/