Skip to main content

Lección 3: declaraciones condicionales

En la lección anterior, aprendiste a usar los datos del sensor óptico en un proyecto para ordenar un disco por color. En esta lección, se basará en lo que aprendió para explorar las opciones en VEXcode que permiten al proyecto tomar una decisión sin importar qué color detecte el sensor óptico. Aprenderá sobre: 

  • Por qué es importante optimizar la toma de decisiones en un entorno industrial.
  • La diferencia entre los bloques If thenIfthen else y Else if.

Comprobación de varias condiciones

En la lección anterior, creaste un proyecto que podía ordenar un disco por color en un palé rojo o un palé verde. Si bien esto es efectivo, el proyecto solo podía ordenar un disco a la vez. En un entorno de fábrica, muchos objetos deben clasificarse y paletizarse repetidamente. Para hacer esto de manera efectiva, el brazo de 6 ejes debe poder tomar repetidamente una decisión sobre cómo mover los objetos o si se necesita intervención humana. Considere los cubos que movió en el curso Introducción al brazo de 6 ejes.Imagen del brazo de 6 ejes sosteniendo un cubo azul sobre el sensor óptico

¿Qué pasa si hay un cubo azul en la zona de carga? ¿Qué pasaría en el proyecto de la lección anterior? En un entorno industrial, se deben considerar todas las condiciones posibles. Si un objeto errante se mezcla con los objetos que se van a clasificar, es probable que se necesite la intervención humana para garantizar que la celda de trabajo y los trabajadores que la rodean se mantengan seguros y funcionen de manera efectiva.

Bloques If then secuenciales

En la lección anterior, usaste dos bloques If then en secuencia para verificar dos condiciones separadas una tras otra, esencialmente haciendo dos preguntas dentro del proyecto.

Imagen de un proyecto de ejemplo para la actividad de la lección anterior con los bloques If then resaltados

Primero, ¿el objeto es rojo?, luego, ¿el objeto es verde?. Cada condición se comprueba cada vez que se ejecuta el proyecto, independientemente de lo que detecte el sensor óptico. Si bien esta estructura le permitió ordenar un disco a la vez de manera efectiva, no es la forma más eficiente de hacerlo. Se podría clasificar un disco rojo, pero el sensor óptico también podría detectar el verde de otra cosa en el entorno, y viceversa. Tampoco se tiene en cuenta un objeto que no es ni rojo ni verde, como un objeto inesperado que podría causar un problema de seguridad.

Imágenes de flujo del proyecto

A lo largo de esta lección, se comparten imágenes que explican el flujo de proyectos de VEXcode. Puedes recrear estas imágenes en tu cuaderno de ingeniería mientras avanzas por la lección. 

Utiliza herramientas en Google Slides o Microsoft PowerPoint como flechas, cuadros o diagramas de flujo para ayudarte a crear visualizaciones que funcionen mejor para ti en tu bloc de notas.

imagen de ayuda de flujo de proyecto -- caja de herramientas de flecha

 

Bloques secuenciales If then else

Hay un bloque diferente que podría usarse para permitirnos verificar las condiciones de rojo y verde y dar cuenta de un color diferente. El bloque If then else es un bloque C que ejecuta los bloques dentro de la rama if o la rama else, en función del valor booleano informado.

si no, bloquee con descripciones de flujo del proyecto

Después de ejecutar la rama if o la rama else, el proyecto se moverá al siguiente bloque de la pila. También se puede mostrar el flujo del proyecto de los bloques If then else para que las ramas sean más visibles.

si no, proyecte la imagen de flujo con las ramas explicadas

Tenga en cuenta que en estos ejemplos, la rama else se utiliza para manejar la condición de que un objeto no sea ni rojo ni verde. En ese caso, sería necesaria la intervención humana. Anteriormente aprendió que la luz azul en la Torre de Señal se utiliza para indicar la necesidad de intervención humana. Además, una parada controlada detendrá el movimiento del brazo de 6 ejes para mantener a las personas y la maquinaria seguras. Se pueden añadir un bloque de torre de señal  Set y un bloque de parada de control Set a la rama else, de modo que un objeto que no fuera rojo o verde activaría estas características de seguridad.

contenido de la rama else del bloque If then else llamado

Las imágenes hasta ahora solo han mostrado cómo manejar la condición del objeto que es rojo. Otro Si entonces se necesita otra cosa para comprobar el estado del objeto que es verde.

dos si entonces elses en el proyecto

Pensemos en el flujo del proyecto con esta estructura. Cada vez que se ejecute el proyecto, se ejecutarán varias ramas, sin importar el color que detecte el sensor óptico.

flujo del proyecto de dos si entonces de lo contrario bloquea

Pensemos en esto con un disco rojo como ejemplo. Si el sensor óptico detecta rojo, la condición del primer bloque If then else se informará como true. El bloque dentro de la rama if correría, moviendo el brazo de 6 ejes sobre el palé rojo. Sin embargo, la condición dentro del segundo bloque If then else se informaría como false. Esto significa que el bloque dentro de su rama else se ejecutaría, poniendo el brazo de 6 ejes en una parada controlada y parpadeando en azul en la torre de señal. Debido a que el brazo de 6 ejes estaría en un estado de parada controlada, ningún otro bloque en el proyecto podría ejecutarse, y eso detendría todas las operaciones hasta que se resolviera. 

imagen de flujo del proyecto

Si bien ahora podemos dar cuenta de un objeto inesperado (como un cubo azul), el brazo de 6 ejes nunca llegará al punto en el proyecto de liberar el disco en el palé. En lugar de verificar las condiciones roja y verde una tras otra, hay una forma de verificar si un objeto es verde solo si el objeto no es rojo.   

Bloques anidados If then else 

Cada una de las ramas del bloque If then else puede aceptar otros bloques C dentro de ellas. Esto se llama "anidamiento". Esto significa que el segundo bloque If then else se puede anidar dentro de la rama else del primero, así.Imagen del proyecto con el segundo bloque If then else anidado en la rama else del primero

Ahora la condición del sensor óptico que detecta el verde solo se verificará cuando la condición anterior (el sensor óptico detecta el rojo) se informe como falsa. Entonces, cuando el sensor óptico detecta rojo, solo se ejecutaría la primera rama, moviendo el disco por encima del palé rojo. 

si no, si no, si bloquea anidado el flujo del proyecto

Si el sensor óptico detecta verde, la condición de la primera rama if (Optical detecta rojo) informaría falso, por lo que la rama else se ejecutaría. La condición del bloque If then else anidado se verificaría para ver si el sensor óptico detecta verde. Esa condición se informaría como verdadera, por lo que el bloque dentro de la segunda rama se ejecutaría, moviendo el Disco sobre el palé verde. 

Si el sensor óptico no detectara ni rojo ni verde (como en el caso de que se detectara un cubo azul), ambas condiciones se informarían como falsas, por lo que la rama else del bloque If then else anidado se ejecutaría, desencadenando una parada controlada y alertando a los trabajadores de la necesidad de intervención humana. Estos flujos del proyecto también se pueden visualizar como un diagrama de flujo, como el que se ve aquí.

diagrama de flujo del flujo del proyecto

Anidado Si entonces los bloques else se pueden ver como una lista en cascada de preguntas. Aquí las preguntas son las siguientes: 

  1. ¿El objeto es rojo? 
    1. ¿Sí? Desplácese sobre el palé rojo y deje de hacer preguntas.
    2. ¿No? Haz otra pregunta. 
      1. ¿El objeto es verde?
        1. ¿Sí? Desplácese sobre el palé verde y deje de hacer preguntas.
        2. ¿No? Entonces el objeto no es rojo ni verde. Cambie los colores de la torre de señal y active una parada controlada.

Observe que las preguntas solo se hacen si la pregunta anterior se responde negativamente. 

Si bien esto maneja todas las condiciones que queremos verificar, hay otro bloque que verificará las condiciones de la misma manera, pero es más fácil de construir que los bloques de anidación. 

Si no, si bloquea

El bloque Else if le permite comprobar varias condiciones dentro del mismo bloque. Cada una de las condiciones en este bloque se verificará secuencialmente, solo si la condición anterior se informa como falsa. Si todas las condiciones booleanas para else if branches son falsas, se ejecutarán los bloques dentro de la sección else.

else if block

Este bloque tiene el mismo flujo de proyecto que los bloques If then else anidados, pero es más fácil de construir porque no hay necesidad de anidar bloques. Aprenderá más sobre la codificación con el bloque Else if en la siguiente lección.

Compruebe su comprensión

Antes de pasar a la siguiente lección, asegúrate de comprender los conceptos de esta lección respondiendo las siguientes preguntas en tu cuaderno de ingeniería.

Verifique sus preguntas de comprensión > (Google Doc / .docx / .pdf )


Seleccione Siguiente > para aplicar el bloque Else if en un proyecto.