Bucles

Los bucles son estructuras de programación que permiten repetir un conjunto de instrucciones. ya hemos visto dos, el bucle infinito, que permite repetir un conjunto de instrucciones indefinidamente y el bucle for que permite repetir un bloque de instrucciones un número de veces. Ahora vamos a ver bucles condicionales que se van a repetir dependiendo del estado de las entradas

Bucle while

El bucle while es un bucle que se repite mientras se cumpla una condición

Sintaxis

El bucle tiene dos posibles formas de escribirse

Primera opción

do

instrucciones

loop while condición

Segunda opción

do while condición

instrucciones

loop

En ambos casos la función similar; se repetirán las instrucciones entre do y loop mientras se cumpla la condición escrita después de while. La diferencia es que en la primera opción las instrucciones no se realizan ni una vez si al principio del bucle no se cumple la condición, mientras que en la segunda opción, las instrucciones entre do y loop se hacen al menos una vez, porque la condición se evalúa después.

Las instrucciones pueden no existir, de manera que en ese caso, el programa funciona como una espera que dura mientras se cumpla la condición. De todos modos suele ser buena idea en esos casos poner como instrucción una pequeña espera, como pause 100, para no atosigar al controlador.

Ejemplo

do while pin6=0
high 0
loop
low 0

Este programa encenderá el led 0 y lo mantendrá encendido hasta que pulsemos el pulsador 6. Entonces se apagará y terminará el programa.


Bucle until

es muy parecido al bucle while, pero en lugar de realizase mientras se cumpla la condición se realiza hasta que se cumpla

Sintaxis

Ttiene dos posibles formas de escribirse

Primera opción

do

instrucciones

loop until condición

Segunda opción

do until condición

instrucciones

loop

En ambos casos la función similar; se repetirán las instrucciones entre do y loop hasta que se cumpla la condición escrita después de until. La diferencia es que en la primera opción las instrucciones no se realizan ni una vez si al principio del bucle no se cumple la condición, mientras que en la segunda opción, las instrucciones entre do y loop se hacen al menos una vez, porque la condición se evalúa después.

Ejemplo

do until pin6=1
high 0
loop
low 0

Este programa este programa funciona exactamente como el anterior. Para conseguir que funcione igual, ha habido que cambiar la condición


  • Ejercicio

    Realiza un programa que funcione como el ejercicio 12 cuando se pulsa el pulsador 6 y que funcione de manera similar pero en sentido contrario si se pulsa el pulsador 7. Si no se pulsa ninguno, todos los led deben estar apagados


  • Ejercicio 19

    Realiza un programa que funcione como el ejercicio 12 cuando se pulsa el pulsador 6 y que funcione de manera similar pero en sentido contrario si se pulsa el pulsador 7. Si no se pulsa ninguno, todos los led deben estar apagados


  • Ejercicio 20

    Realiza un programa en el que pulsando el pulsador 6 se enciende el led 0, si se vuelve a pulsar, se enciende también el led 1 y así sucesivamente

    Mejora el programa para que si se pulsa el pulsador 7 se apaguen todos los led


  • Ejercicio 21

    Realiza un programa en el que pulsando el pulsador 6 se enciende el led 0, si se vuelve a pulsar, también se enciende el led 1 y así sucesivamente

    Si se pulsa el pulsador 7 los led se van apagando de uno en uno.

    Mejora el programa para que si pulsas continuamente los pulsadores sólo se enciende/apaga un led. para que se encienda/apague otra habrá que soltar el pulsador y volver a pulsar.


  • Ejercicio 22

    Realiza un programa que funcione como el ejercicio 12 cuando se pulsa el pulsador 6 o el 7 y que sino se pulsa ninguno todos los led estén apagados


  • Ejercicio 23

    Realiza un programa que funcione como el ejercicio 12 cuando se pulsa el pulsador 6 y el 7 y que en caso contrario, todos los led estén apagados


  • Ejercicios de ampliación

    Los siguientes ejercicios sólo debes hacerlos si te manejas perfectamente con los anteriores.

    Entradas "analógicas"

    En robótica se llaman entradas analógicas en las que se pueden leer diferentes niveles de tensión. Se diferencian de las digitales en que en estas sólo se pueden leer dos niveles de tensión. Una entrada digital tiene dos posibles valores. Una entrada analógica puede interpretar hasta 256 niveles diferentes de tensión. Las entradas 0, 1 y 2 de la placa de alta potencia están conectados a pines capaces de leer valores analógicos. El chip 18M2 tiene más pines capaces de leer niveles analógicos

    Conecta un potenciómetro a la entrada analógica 0


    Prueba el siguiente programa moviendo el potenciómetro.

    inicio:
    readadc 0,b0; se lee el valor de la entrada 0 y se almacena en la variable b0
    debug ; nos muestra el valor de las variables en la pantalla del ordenador
    if b0<100 then ; Dependiendo del valor del potenciómetro, se encienden unas salidas u otras
    	high 0,1,2,3
    	low 4,5,6,7
    else
    	high 4,5,6,7
    	low 0,1,2,3
    endif
    pause 100; un rato parado para que lo veamos
    goto inicio
  • Ejercicio 24

    Haz un programa que funcione de manera similar pero si b0 es menor de 64 se encienden únicamente 0, y 1. Si está entre 64 y 128 se encienden únicamente las salidas 2 y 3. Si está entre 128 y 192 se encienden 4 y 5. Si es mayor de 192 se encienden 6 y 7.

  • Ejercicio 25

    Haz un programa que funcione como el siguiente ejemplo.


  • Ejercicio 26

    Haz un programa que funcione como el siguiente ejemplo.


  • Ejercicio 27

    Conecta una LDR a la controladora en una entrada analógica. Existe una resistencia interna que conecta las entradas al polo negativo. En algunas placas esa resistencia no está presente y entonces es importante ponerla.


  • Ejercicio 28

    Haz un programa que funcione como el siguiente ejemplo. El los if la condición puede ser que un valor sea mayor o menor que otro.


  • Ejercicio 29

    Haz un programa que funcione como el siguiente ejemplo.


  • Ejercicio 30

    Conecta una LDR a una entrada analógica y consigue que se enciendan más led cuanto más luz reciba.