sábado, 30 de marzo de 2013

Bloques personalizados (NXT-G) 2/6

Segunda entrada que surge de la traducción del gran tutorial de Dave Parker que hice para mi equipo de FLL.
 

Crear Mis Bloques con parámetros de entrada

El bloque BeepBeep creado en la sección anterior fue muy fácil de crear y de usar, pero es algo limitado en lo que puede hacer. Siempre van a sonar exactamente los mismos dos tonos cada vez que se utiliza. Esto está bien para algunos bloques, pero muchas veces se quiere crear un Mi Bloque que pueda modificar su comportamiento cada vez que se utiliza. Por ejemplo, cada vez que utilice el bloque Mover estándar, puede especificar una duración diferente, un nivel de energía diferente, etc. Estos aspectos del bloque que se pueden modificar se denominan parámetros. (Más específicamente, los parámetros de entrada, ya que proporcionan valores de datos de entrada para el bloque). Es posible crear un Mi Bloque que contenga uno o más parámetros de entrada que modifiquen su comportamiento y hacerlo más flexible, y eso es lo que vamos a aprender en esta sección.

¿Qué son los parámetros de entrada?

La mayoría de los incorporados en NXT-G bloques tienen parámetros de entrada. Por ejemplo, el bloque Mover que se muestra en la Figura 12a tiene varios parámetros que se muestran en el panel de configuración cuando se selecciona
el bloque (Figura 12b). Estos parámetros le permiten cambiar el comportamiento de cada uso del bloque.
Figura 12a / b: Muchos de los incorporados en NXT-G bloques tienen parámetros de entrada que se pueden cambiar.


Como un ejemplo de cómo crear un Mi Bloque con un parámetro de entrada, vamos a crear un Mi Bloque que es una versión simplificada del bloque Mover. Si se selecciona el bloque Mover y se crea un Mi Bloque con él siguiendo los pasos mostrados en el ejemplo anterior BeepBeep (un Mi Bloque puede consistir en un sólo bloque), entonces el Mi Bloque resultante no tendrá parámetros de entrada y siempre utilizará los valores de los parámetros que se hayan declarado en el bloque que contiene cuando se creó.Por ejemplo, el bloque de Mover en la Figura 12 anterior se fija para tener una duración de 500 grados, nivel de potencia 75, etc. La figura 13a muestra el resultado de la creación de un Mi Bloque con este bloqueMover. Debido a que el Mi Bloque siempre utilizará una duración de 500 grados, puse el nombre de Forward500 a Mi Bloque. Puesto que no hay parámetros, el panel de configuración que aparece cuando el Mi Bloque se ha seleccionado está vacío (Figura 13b). Esto puede ser útil si desea mover en esta cantidad una y otra vez en un programa, pero sería más útil si el programa que usa el Mi Bloque puede especificar la duración de un parámetro, similar al bloque Mover original.
Figura 13a / b: Un Mi Bloque
simple creado a partir de un único bloque Mover no tiene parámetros que se puedan cambiar.

Creación de un Mi Bloque con un parámetro de entrada

En esta sección, vamos a aprender a crear un Mi Bloque que incluye un parámetro de entrada. Hacer esto es más complejo que un Mi Bloque simple
tal como el ejemplo BeepBeep anterior y requiere el uso de centros de datos, cables de datos y bloques de variables y / o constantes. Asegúrese de que está familiarizado con estos conceptos antes de continuar.

Recursos: Cómo aprender acerca de los centros de datos, cables de datos y variables.

Como ejemplo de un Mi bloque con un parámetro de entrada, vamos a crear una nueva versión de un bloque Mover simplificado llamado ForwardDeg que incluirá un parámetro Degrees que permitirá que el programa pueda especificar cuántos grados debe moverse, en lugar de desplazarse siempre 500 grados, como en el bloque Forward500 anterior.
Para crear un Mi Bloque con un parámetro, tendrá que crear una conexión de datos para cada parámetro de los bloques contenidos a los que desea acceder. Querremos acceder al parámetro Duración del bloque Mover, por lo que debemos empezar por abrir el centro de datos del bloque Mover como se muestra en la Figura 14.
Figura 14: Para acceder a los puertos de datos para un bloque, haga clic en el lugar indicado para deslpegar bloques de datos.


Para crear una conexión de datos por cable para el parámetro Duración del bloque Mover, tenemos que crear una fuente de datos para ello. Una manera fácil de hacer esto en el software NXT 2.0 es utilizar el bloque Constante (Figura 15). Colocamos el bloque Constante antes que el bloque de Mover, como se muestra en la Figura 16.
Nota: El bloque constante se añadió en el software NXT 2,0. Si está utilizando una versión anterior de NXT-G, se puede utilizar un bloque variable Leer en su lugar. Sin embargo, como no se puede especificar un valor para una variable en un bloque de lectura variable, es posible que también deba agregar un bloque de escritura Variable antes en el programa para darle un valor a la misma.


Figura 15: El bloque constante en el menú de datos se puede utilizar para crear una conexión a un puerto de datos.


Figura 16: Coloque el bloque constante al principio de la secuencia.


Usando el panel de configuración para el bloque constante (Figura 17), configure la constante Personalizar para la Acción, a continuación establezca el tipo de datos para el parámetro (número en este caso), y dé a la constante un nombre que ayudarle a recordar lo que hace (en este caso he elegido "Degrees"). También puede introducir un valor para la constante en el campo Valor. Este valor es útil para probar la secuencia de los bloques antes de crear el Mi Bloque (pero el Mi Bloque final tendrá un parámetro en lugar de este valor).
Figura 17: En el panel de configuración para el bloque constante, introduzca el tipo de datos, un valor de prueba, y un nombre para la constante.

Una vez que el bloque constante ha sido correctamente configurado, conéctelo al bloque de parámetros que desea controlar con un cable de datos (Figura 18).
Figura 18: Conecte con un cable el puerto de salida del bloque constante al puerto de entrada para el parámetro de entrada.


El programa de dos bloques de la figura 18 ahora hará lo mismo que el programa de un bloque en la Figura 12. Se utilizará el bloque Mover para avanzar 500 grados.
La diferencia es que ahora hemos "conectado" el parámetro Duración utilizando un bloque constante estableciendo el valor 500 en lugar de poner el 500 directamente en el bloque Mover. Tenga en cuenta que todos los demás parámetros del bloque Mover tales como el nivel de potencia se toman directamente desde el panel de configuración del bloque de Mover (incluyendo el ajuset grados que le dice al bloque Mover que interprete el valor de duración de 500 como grados y no como segundos). Ahora es un buen momento para probar el programa para asegurarse de que funciona como se espera antes de crear el Mi Bloque. 
Después de probar el programa en la Figura 18, se puede crear el Mi Bloque. Para ello seleccione el bloque Mover, pero no el bloque Constante, a continuación haga clic en el botón Crear Mi Bloque(Figura 19) y proceda con el Mi Generador de Bloques creando un bloque llamado ForwardDeg.
Figura 19: Al crear el Mi Bloque, seleccione el bloque Mover, pero no el bloque Constante.


Creando Mi bloque como se muestra en la Figura 19 se generará un Mi Bloque con un parámetro de entrada para la propiedad Duración debido a la regla siguiente bloque de Move:
 
Regla: Cuando una secuencia de bloques se convierte a un Mi Bloque, cualquier ruta de cable de datos que lleva a una fuente de datos fuera del Bloque (no incluidos en los bloques seleccionados) creará un parámetro de entrada.

Usted puede pensar en el Mi Bloque como un "corte" del programa cuando se crea, y los caminos que conducen fuera del corte de bloques son "extremos abiertos" que necesitan fuentes de datos. Estos extremos se convierten en los parámetros de entrada, donde las fuentes de datos serán especificadas por el programa que utiliza el Mi Bloque. Si había seleccionado también el bloque constante en la figura 19 al hacer el Mi Bloque, el resultado sería un nuevo Mi Bloque que siempre se mueve en 500 grados, ya que el número 500 se especifica dentro de el contenido del bloque.

El uso de un Mi Bloque con un parámetro de entrada

Después de crear un Mi bloque desde la selección que se muestra en la Figura 19 y nombrarlo ForwardDeg, el programa modificado se muestra en la Figura 20a. El bloque de Mover (el único bloque incluido en el Mi Bloque) ha sido sustituido por el Mi Bloque ForwardDeg , y el bloque Constante sigue ahí y ahora está conectada en el centro de datos de ForwardDeg. Seleccionando el bloque ForwardDeg se muestra el panel de configuración de la Figura 20b, donde podemos ver que ahora tenemos acceso al parámetro Duration del bloque Mover de dentro del Mi Bloque.
Figura 20a / b: Un parámetro de entrada para un Mi Bloque está disponible en el centro de datos y en el panel de configuración.

Al igual que con los bloques incorporados en el NXT-G, si una fuente de datos está conectada al concentrador de datos de un mi bloque, ese será el valor de datos que se utilizará, de lo contrario será el valor del panel de configuración del bloque el que se usará. Aquí el valor de 500 se conecta en el bloque Grados Constante, por lo que dicho valor prevalece sobre el valor 0 para el Duración en el panel de configuración, por lo que el programa resultante seguirá haciendo lo que hacía antes (avanzar en 500 grados). Si se prueba el programa modificado después de crear un Mi Bloque, debería hacer lo mismo que el programa utilizado para crear el Mi Bloque.

Ahora que el Mi Bloque ForwardDeg ha sido creado, se puede borrar el bloque Grados constante si se quiere, y especificar la Duration directamente en el panel de configuración del bloque ForwardDeg. También puede colocar mas bloques ForwardDeg en su programa de la paleta personalizada y especificar la Duration ya sea por el centro de datos o en el panel de configuración.

En este punto, usted se estará preguntando por qué querría crear un Mi Bloque de un solo bloque y facilitar el acceso a uno solo de sus parámetros. En este sentido, el bloque ForwardDeg parece menos útil que el bloque Mover por sí mismo, ya que el bloque Mover sigue siendo sólo un bloque y también le permite cambiar el nivel de potencia, etc. El bloque ForwardDeg principalmente se muestra aquí como un ejemplo sencillo, pero hay algunas situaciones en las que puede encontrar que algo como esto tiene utilidad.
Por un lado, mediante el bloque de ForwardDeg podría hacer que el programa que utiliza sea más fácil de leer. Si el programa tiene un montón de bloques Mover dentro, no se puede decir tan fácilmente cuáles van hacia adelante o hacia atrás o usando grados o segundos sin una mirada más de cerca a los bloques. Usando Mis bloques para acciones le permite ver los nombres asignados a cada bloque, que es más indicativo de lo que hace. También, se aprovechar del hecho de que un cambio en el contenido de un Mi Bloque afectará a todos los usos de ese bloque. Por ejemplo, si uso el bloque ForwardDeg diez veces en un programa, los diez usos utilizará el mismo nivel de potencia que se estableció dentro del Mi Bloque (75 más arriba). Entonces, si se edita el contenido de mi bloque con sólo cambiar el nivel de potencia del bloque Mover dentro de él, los diez usos del bloque ForwardDeg utilizarán automáticamente el nuevo nivel de potencia. Si hubiera utilizado diez bloques Mover independientes, tendría que cambiar los diez niveles de potencia de forma individual.

El diseño de su propios Parámetros de entrada


En el ejemplo ForwardDeg anterior, se ha creado un parámetro de entrada proporcionando acceso directo a uno de los parámetros de los bloques contenidos en el Mi Bloque (el parámetro de Duración del bloque de Mover). También puede diseñar sus propios parámetros de entrada para mi un bloque que se comporten de la forma que desee y elegir sus propios nombres para ellos. Como ejemplo, vamos a empezar otra vez con el ejemplo de mi un bloque que se mueve hacia adelante, y esta vez vamos a hacer una versión diferente llamada Forward cm, que tiene el parámetro Duration (lo que se interpreta como grados) sustituido por un parámetro llamado Distancia cm, que es la distancia en centímetros que queremos que el robot se mueva. Muchos usuarios de robots NXT quisieran decirle al robot hasta dónde viajar en pulgadas o centímetros en lugar de tener que determinar el valor correcto grados. Con un poco de matemáticas, podemos crear un Mi Bloque que lo hará por nosotros en NXT-G.
Mediante la ejecución de algunos experimentos con un robot que utiliza los neumáticos estándar
NXT 2.0 (43,2 x 22) sobre sus ruedas motrices, se puede determinar que los motores de tracción deben girar 27 grados para hacer robots de viaje 1 cm (esto se determina mejor mediante la observación de cuántos grados son necesarios para recorrer una distancia más larga, como 100 cm y luego dividiendo para determinar el valor para 1 cm). Tenga en cuenta que esta cifra puede variar dependiendo de si el robot utiliza orugas frente a los neumáticos, el diámetro de los neumáticos y los engranes utilizados, pero una vez que se han elegido éstos en el diseño de su robot puede determinar la conversión de grados a cm.

La Figura 21a muestra un programa que convierte una distancia en centímetros (procedente de un bloque Constante denominada cm) a los grados de motor mediante el uso de un bloque de Matemáticas, y luego el cableado de los grados resultantes al puerto Duración en un bloque Mover. El bloque de Matemáticas se configura para multiplicar por 27 (Figura 21b).

Figura 21a / b: El valor de bloque Constante se multiplica por 27 antes de ser utilizado como los grados Duration.


Al seleccionar tanto el bloque de Matemáticas y el bloque de movimiento (pero no el bloque constante) en la creación de un Mi Bloque (Figura 22), el Mi Bloque resultante
tendrá un parámetro de entrada que permitirá que el programa que lo usa pueda suministrar la distancia en cm. Observe que el parámetro de entrada se produce por que el cable de datos que lleva al puerto "A" del bloque de matemáticas Math fue "cortado" del bloque constante durante la creación Mi Bloque. El cable que conduce al puerto Duración del bloque Mover no resultará en otro parámetro de entrada, puesto que su fuente de datos (el bloque de matemáticas) está dentro del bloque. Esto es lo que queremos, el valor de nuestro parámetro de entrada en cm va al bloque de matemáticas, se multiplica por 27, y luego se envía al bloque Mover como grados.

Figura 22: Los bloques Mover y Matemáticas y se incluyen en el Mi Bloque, pero no el bloque Constante.


Cambio del nombre de un parámetro

El resultado es la creación de un Mi bloque desde el programa que se muestra en la Figura 22 al que damos el nombre Forward cm y luego abriendo el contenido del Mi bloque se muestra en la Figura 23. La pestaña Forward cm contiene el contenido de Mi bloque, que consta de dos bloques (un bloque de Matemáticas y un bloque de movimiento), y también un bloque de parámetros de conexión especial que representa el origen del parámetro de entrada. Por defecto, NXT-G nombra un parámetro de entrada con el nombre del puerto de datos al está conectado, por lo que en este caso el parámetro se denomina "A", ya que está conectado al puerto "A" del bloque de Matemáticas. Este es también el nombre que se mostrará en el panel de configuración de Mi Bloque. Puede cambiar el nombre de un parámetro para que sea más descriptivo, como se explica a continuación, y por lo general querrá hacerlo.
Figura 23: El nombre predeterminado del parámetro general se toma del puerto de datos a que se conecte.


Para cambiar el nombre de un parámetro en un Mi Bloque, haga doble clic en el nombre del parámetro (que se muestra encima del bloque de parámetros en la vista del contenido del Mi Bloque) y escriba un nombre nuevo. También puede arrastrar el bloque de parámetro de conexión a una posición diferente si se desea, como se muestra en la Figura 24.
Figura 24: Un bloque de conexión parámetro se puede mover y cambiar de nombre.


Al cambiar el nombre de un parámetro, el nuevo nombre se utilizará también en el panel de configuración de Mi Bloque. Sin embargo, para ver el nuevo nombre, tendrá que borrar la primera copia que fué creada en la definición de Mi Bloque e insertar una nueva copia del Mi Bloque.
La figura 25 muestra una nueva copia del bloque Forwad cm y su panel de configuración que muestra el parámetro de entrada, ahora denominada Distance cm.
Figura 25: La inserción de una nueva copia del Mi Bloque mostrará el parámetro cambiado el nombre.


Creación de un Mi Bloque con parámetros de entrada múltiple

El ForwardDeg y el bloque Forward cm que hemos creado antes tenían sólo un parámetro de entrada, pero como habrá adivinado, es posible crear un Mi Bloque que tiene más de un parámetro de entrada, y esto es a menudo útil. Hay algunas cuestiones a tener en cuenta, por lo que esta sección se mostrará un ejemplo más de una variante extendida del bloque Forward cm, que añade un parámetro de entrada para controlar el nivel de potencia.
En primer lugar, es importante señalar que no se puede agregar un parámetro a un Mi Bloque
existente, debe empezar de nuevo y crearlo de nuevo. Usted puede reciclar algunos de sus trabajos anteriores, al copiar y pegar bloques del viejo Mi Bloque si es necesario, pero debe pasar por el proceso de creación del Mi Bloque otra vez.

Nota: Una vez que se crea Mi Bloque, puede cambiar el nombre de un parámetro de entrada, pero no se puede agregar o eliminar un parámetro de entrada, ni se puede cambiar el tipo (número, lógica, o texto) de un parámetro. Por lo tanto, es una buena idea pensar un poco en los parámetros que se van a utilizar antes de crear un Mi Bloque complejo. También debe guardar una copia del programa fuente antes de crear el Mi Bloque, de modo que pueda regresar a esta copia y hacer los cambios para modificar los parámetros si necesita un nuevo bloque modificado.


Para crear un Mi Bloque con múltiples parámetros, puede empezar por la creación de un programa que realiza la acción deseada, usando un bloque Constante conectado a cada puerto de datos de los que desea crear un parámetro. La figura 26 muestra un primer intento de hacer esto. Este programa es similar al programa utilizado para crear el bloque Forward cm ( Figura 21a ), con la adición de otro bloque Constante que está conectado al puerto de datos de Potencia del bloque Mover. Sin embargo, este programa no se puede utilizar para crear nuestro deseado mi bloque debido a que los bloques que se necesitan para crear el Mi Bloque (sólo el bloque de Matemáticas y el bloque Mover) no son contiguos (uno al lado del otro en la viga de secuencia). La Figura 27 muestra un programa corregido en que el bloque Constante Power se trasladó a la parte delantera del programa, de modo que los bloques a incluir en el Mi Bloque se puede seleccionar contiguamente.
Figura 26: Una disposición incorrecta para crear un Mi Bloque con dos parámetros.


Figura 27: Dos bloques constantes colocados al principio de la secuencia permiten que

los otros bloques puedan ser seleccionado juntos para la creación de Mi bloque.

Después de crear un Mi bloque desde el programa que se muestra en la Figura 27, y denominar a esta versión del bloque como Forward, el programa de origen se modifica como se muestra en la Figura 28. Se puede ver que el bloque Forward tiene dos parámetros de entrada, y ambos están todavía conectados a los bloques de Constante que hemos utilizado para construirlo.
Figura 28: El Mi Bloque Forward tiene un centro de datos con dos puertos.


Al igual que antes, haga doble clic en el bloque Forward y abrirá sus contenidos, y aquí se puede cambiar el nombre de los parámetros. La Figura 29 muestra los contenidos del bloque Fordward con los nombres de los parámetros modificados y el cableado reordenado.
Figura 29: El contenido de Mi Bloque Forward con parámetros renombrados y un comentario de encabezado del módulo.
Como en los ejemplos anteriores, tendrá que insertar una nueva copia del Mi Bloque Forward para ver los parámetros renombrados. La figura 30 muestra una nueva copia del bloque hacia Forward con sus dos parámetros de entrada.

Figura 30: El delantero Mi Bloque con dos parámetros de entrada.


Hacer un comentario en la cabecera del bloque

También se muestra en la Figura 29 anterior un formato recomendable para un comentario de encabezado del bloque, que es una buena manera de explicar lo que hace un Mi Bloque. Especialmente para mi un Mi Bloque más complejo, es una buena idea incluir un comentario dentro del bloque (utilizando la herramienta de comentario en el editor de NXT-G) que explica lo que hace el bloque, y también incluye una línea para cada parámetro que explica lo que representa y para lo que se utiliza dicho parámetro.
Para los bloques incorporados en NXT-G, si usted tiene una pregunta acerca de lo que el bloque o sus parámetros hacen, puede consultar la página de ayuda para ese bloque, pero para los Mi Bloques no existirá, por supuesto, una página de ayuda, y es normal olvidarse cómo utilizar un bloque que ha creado hace tiempo. Si se incluye un comentario encabezando el bloque en la parte superior de cada Mi Bloque sólo tiene que hacer doble clic en un Mi Bloque para abrir el contenido y leer la explicación.
Si agrega un comentario encabezado del bloque, entonces también puede omitir la descripción del bloque en el primer paso del Mi Generador de Bloques ( Figura 4 ), debido a que un comentario de encabezamiento dentro de Mi Bloque aparecerá en la pantalla y cuando se imprime.

No hay comentarios :

Publicar un comentario