Sentencia de iteración do-while

En esta lección aprenderás a codificar  la sentencia  iterativa que permite ejecutar un conjunto de  instrucciones  y si se requiere, que el ciclo se  repita hasta que una  condición  se cumpla y deje de  hacerlo, utilizando la sentencia do while.

En numerosas ocasionas, se requiere en un programa que las sentencias de un bucle de instrucciones se ejecuten  al menos una vez. En este caso utilizamos la sentencia de iteración do while. 

do while

La estructura do while  se ejecuta al menos una vez y después repite las acciones del cuerpo de un bucle  hasta  que se  cumple una determinada condición.

Vamos a revisar el diagrama de flujo de la sentencia do while con la siguiente figura:

Figura 1.  Diagrama de flujo de la sentencia do while

Cómo puedes ver en la imagen de la figura1,  se ejecutan las instrucciones y evalúa la condición, si es verdadera se repite el ciclo y vuelve a evaluar, y así continuamente  hasta que la condición sea falsa y termina el ciclo. Veamos ahora su sintaxis:

Sintaxis

do {
// instrucciones
} while (condición);

Parámetros

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

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

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

Un semáforo  continuamente tiene el color verde para que los carros pasen. Cuando un peatón requiere cruzar la calle, presiona el botón del semáforo y espera a que el semáforo cambie del color verde al amarillo y después al rojo para cruzar la calle. (figura 3)

Figura 3. Ejemplo de un semáforo en crucero

Se desea programar un circuito electrónico que  mantiene encendido un LED color verde, cuando el botón sea presionado, parpadea el Led verde tres veces y se apaga,  se enciende un LED amarillo tres segundos y se apaga para encender un LED rojo  por cuatro  segundos y vuelve a encender el LED verde hasta que sea presionado nuevamente el botón.    El botón esta conectado en el pin 5, el LED verde al pin 4,  el LED  amarillo al pin 3 y un LED rojo al pin 2 ( Figura 3).

Figura 3.  Conexión de un botón al pin 5 y tres leds al pin 4, 3 y 2 de la tarjeta Arduino UNO

En este circuito,  la tarjeta Arduino leerá el valor que indica el estado del botón,  entonces debemos configurar el pin 5 de entrada. La instrucción de configuración del pin 5 digital sería:

pinMode(5,INPUT); // Configura el pin 5 de Entrada ( botón)

La tarjeta Arduino enviará a los leds el valor HIGH (1) para encenderlo y LOW (0) para apagarlos, por lo tanto se deben configurar los pines 2, 3 y 4  como salida. La instrucción de configuración de los  pines sería:  

pinMode(2,OUTPUT); // configura el pin 2 de salida (led rojo)
pinMode(3,OUTPUT); // configura el pin 3 de salida (led amarillo)
pinMode(4,OUTPUT); // configura el pin 4 de salida (led verde)

Para comenzar, la tarjeta Arduino envía el valor LOW a los LEDS amarillo y rojo (pin 4 y 3 ) como lo muestran las siguientes instrucciones:

digitalWrite(2,LOW); // Apaga el LED rojo
digitalWrite(3,LOW); // Apaga el LED amarillo

El bucle de intrucciones a repetir comienza enviando la tarjeta Arduino el valor HIGH al LED verde (pin 4)  como sigue:

digitalWrite(4,HIGH); // Enciende el LED verde

Utilizamos la  función digitalRead  para leer el valor  del pin 5 conectado al botón y se almacena en una variable llamada valBtn como sigue:

valBtn = digitalRead(5); // Lee valor de pin 5 y lo guarda en valBtn

El valor almacenado en la variable valBtn es utilizado para construir la condición que permita verificar si se a presionado el botón. Todas las instrucciones que forman el cuerpo del bucle  están encerradas entre las palabras clave do  y while, por eso las sentencias del bucle se ejecutan al menos una vez antes de evaluar la condición. el bucle completo sería:

do { // Inicia el ciclo de instrucciones a repetir
digitalWrite(4,HIGH); // Enciende el LED verde
valBtn = digitalRead(5); // Lee valor de pin 5 y lo guarda en valBtn
} while( valBtn != HIGH); // mientras vBtn es diferente a HIGH(1) continúa el ciclo

Cuando se ha presionado el botón (HIGH)  no se cumple la condición y termina el ciclo de repeticiones. Entonces se  ejecutas las siguientes instrucciones que hacen parpadear el LED  verde con un ciclo for 

for (parpadeo=0; parpadeo<=3; parpadeo++) // Repite con estructura for prender y apagar el LED verde
{ digitalWrite(4,HIGH);
delay (250);
digitalWrite(4,LOW);
delay (250);
} // fin for

Una vez terminado el ciclo de parpadeo del LED verde,  ahora prendemos el LED amarillo por tres segundos:

 digitalWrite(3,HIGH); // Enciende LED amarillo
delay (2000);
digitalWrite(3,LOW);

Y terminamos prendiendo el LED rojo por 4 segundos para que el peatón pueda cruzar la calle:

 digitalWrite(2,HIGH); // Enciende LED rojo
delay(4000);

 

Manos a la obra

Armando Circuitos

Ahora vamos a aplicar la sentencia do while haciendo   la  práctica que consiste en la construcción y programación de un circuito electrónico electrónico que  mantiene un LED verde encendido hasta que se presione un botón, entonces apaga el LED color verde y enciende y apaga un LED amarillo y un LED rojo.    

Materiales

Los materiales requeridos para hacer la práctica son los siguientes:

Los  materiales ya los hemos utilizado en prácticas anteriores de este manual, si no te acuerdas o 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 4. Recuerda que el ánodo de cada  led va conectado a la resistencia y el cátodo a la tierra.

Figura 4. Diagrama esquemático del circuito electrónico para activar un semáforo con un botón.

Programación del circuito electrónico

Ahora te toca a ti capturar el código del programa en el IDE de Arduino. Procura realizarlo tú mismo para aprender la forma de codificar la sentencia do while. 

/* Manual de programación con Arduino
* Práctica: Aplicación de sentencia do while
* Objetivo: Encender leds simulando un semáforo de crucero activado por un botón
* Fecha: noviembre 2020
* Autor: Milagros Pacheco Castañeda
*/

int valBtn=0; // Declaración e inicialización de la variable valBtn
int parpadeo=0; // Declaración e inicialización de la variable parpadeo

void setup()
{
pinMode(2,OUTPUT); // Configura el pin 2 de salida (led rojo)
pinMode(3,OUTPUT); // Configura el pin 3 de salida (led amarillo)
pinMode(4,OUTPUT); // Configura el pin 4 de salida (led verde)
pinMode(5,INPUT); // Configura el pin 5 de Entrada ( botón)
Serial.begin(9600); // Configuración de la velocidad de transmisión del monitor serial
}

void loop()
{
digitalWrite(2,LOW); // Apaga el led rojo
digitalWrite(3,LOW); // Apaga el led amarillo
do { // Inicia el ciclo de instrucciones a repetir
digitalWrite(4,HIGH); // enciende el led verde
valBtn = digitalRead(5); // lee valor de pin 5 y lo guarda en valBtn
Serial.print("Carro circulando ");
Serial.print("Edo botón: ");
Serial.println(valBtn);
} while( valBtn != HIGH); // mientras valor de vBtn es diferente a HIGH(1) continúa el ciclo
// Instrucciones fuera del ciclo de repetición
for (parpadeo=0; parpadeo<=3; parpadeo++) // Repite con for prender y apagar led verde
{ digitalWrite(4,HIGH);
delay (250);
digitalWrite(4,LOW);
delay (250);
} // fin for
digitalWrite(3,HIGH); // Enciende led amarillo
delay (2000);
digitalWrite(3,LOW);
digitalWrite(2,HIGH); // Enciende led rojo
Serial.println("Carros en alto, puede cruzar la calle");
delay(4000);
}

Observa que el bloque de instrucciones dentro de las llaves del do  se ejecutan una vez, después se evalúa la condición del while para determinar si vuelve a repetir el bloque o continúa con el programa

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 Código y da un clic en el símbolo  monitor en serie para abrir la pantalla. Presiona el botón Iniciar simulación,  observa como el led verde se mantiene encendido,  da un clic sostenido sobre el botón para simular que lo presionas y observa cómo el led verde se apaga y se encienden los otros leds simulando un semáforo.

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

logo-autoevaluación

Autoevaluación

para aprender más

Para aprender más

Ancona R. (2015) Bucle Do-While vs bucle While. España DIWO. Recuperado de http://diwo.bq.com/bucle-do-while-vs-bucle-while/.