ESTRUCTURA if...
Un bucle while… permite que un programa ejecute un bloque de código de forma repetida mientras se cumpla cierta condición que se evalúa como verdadera (True), en caso contrario no se ejecuta.
La sintaxis de la estructura while… es la siguiente:
while condicion: bloque de codigo que se ejecuta si la condicion es cierta
Como ejemplo de la estructura while… vamos a escribir un programa que que hará parpadear cinco veces el LED azul integrado en la placa DOIT ESP32 DEVKIT V1 en intervalos de medio segundo (500 ms).
No es preciso utilizar la placa DOIT ESP32 DEVKIT V1 , alternativamente podemos hacer parpadear un LED externo conectado con el pin 02 de cualquier placa. No debemos olvidar colocar una resistencia de 100 Ω en serie con el LED para no quemarlo.
El código será el siguiente:
from machine import Pin from time import sleep_ms pin_02 = Pin(2, Pin.OUT, value=0) # inicializamos el GPIO 02 como salida # del LED 02 y lo mantenemos apagado contador = 0 # creamos y ponemos a 0 la variable "contador" while contador < 5: # mientras la variable "contador" es < a 5 (0, 1, 2, 3 y 4)... pin_02.on() # ...encendemos el LED... sleep_ms(500) # ...durante medio segundo, después... pin_02.off() # ...apagamos el LED... sleep_ms(500) # ...durante medio segundo... contador +=1 # ...Por último añadimos una unidad a la variable "contador".
El resultado se verá así:
LA FUNCIÓN BREAK
La función
break nos permite finalizar el bucle, incluso si la condición de la función
while() es cierta.
El siguiente programa tendría el mismo resultado que el ejemplo anterior. Pese a establecer como condición del bucle
while() que el LED debe parpadear 10 veces, a la 5ª vez, cuando la sentencia condicional if… comprueba que la variable «contador» ha llegado a 4, obliga a ejecutar el
break y finalizar el bucle.
from machine import Pin from time import sleep_ms pin_02 = Pin(2, Pin.OUT, value=0) # inicializamos el GPIO 02 como salida # del LED 02 y lo mantenemos apagado contador = 0 # creamos y ponemos a 0 la variable "contador" while contador < 10: # mientras la variable "contador" es < a 10 (0, 1, 2,... 8 y 9)... pin_02.on() # ...encendemos el LED... sleep_ms(500) # ...durante medio segundo, después... pin_02.off() # ...apagamos el LED... sleep_ms(500) # ...durante medio segundo... if contador == 5: # ...Si la variable "contador" ha llegado a 4... break # ...finalizamos el bucle... contador +=1 # ...Por último añadimos una unidad a la variable contador.
BUCLES INFINITOS
Una ventaja de los bucles while… es que el número de iteraciones no está limitada. Si la condición es cierta siempre (True), el bucle no terminará nunca de ejecutarse y tendremos un bucle infinito.
Podemos escribir condiciones que se cumplen siempre de muchas formas diferentes, por ejemplo: while True, while 1, while a==a…
Los bucles infinitos son muy útiles, ya que nos permitirán que el microcontrolador permanezca «atento» a los eventos programados en el bloque de código del bucle. Si alguno de dichos eventos sucede en cualquier momento lo detectará y procesará. Los eventos pueden ser de cualquier tipo (tiempo, detección de datos de sensores de temperatura, presión, luminosidad, sonido, distancia, velocidad, orientación, posición, gas… )
Veamos un ejemplo en el que el LED azul integrado en la placa DOIT ESP32 DEVKIT V1 o un LED externo conectado en el pin 02 de otra placa se enciende cuando presionamos el pulsador:
from machine import Pin pin_02 = Pin(2, Pin.OUT, value=0) # El GPIO_02 funciona como salida para encender el LED pin_04 = Pin(4, Pin.IN) # El GPIO_04 funciona como entrada para detectar el pulsador while True: if pin_04.value() == 1: # si se pulsa el pulsador... pin_02.on() # ...se encenderá el LED pin_02.off() # si no detecta nada el LED se permanecerá apagado
Leave a Reply
Tu correo electrónico está seguro.
You must be logged in to post a comment.