Código de controlador personalizado en VEXcode V5

El uso del controlador puede hacer que sea más fácil conducir y mover su robot para completar una tarea. Sin embargo, existen limitaciones en el uso del programa Drive y, según la construcción de su robot o la tarea en cuestión, es posible que desee controles diferentes. Codificar el controlador le permite optimizarlo para que se ajuste mejor a su robot y a la tarea en cuestión. Hay varias formas de codificar el controlador en VEXcode V5. Cada uno tiene sus ventajas y limitaciones, y algunos métodos se adaptan mejor a determinadas situaciones según el resultado deseado.

Este artículo le guiará a través de tres opciones diferentes para codificar de forma personalizada el controlador en VEXcode V5. Cada método se describirá con sus ventajas, limitaciones y un caso de uso de ejemplo para guiarlo a la hora de elegir un método. A los efectos de este artículo, todos los ejemplos de código que se muestran se crearon para Clawbot. Sin embargo, los mismos conceptos se pueden aplicar a muchas otras compilaciones que se encuentran en builds.vex.comy compilaciones personalizadas.

Opción 1: Asignación de botones en la configuración del dispositivo

Esta opción es excelente cuando estás usando una versión estándar, como un Speedbot o Clawbot, y quieres comenzar a usarla rápidamente.

Esta opción le permite asignar motores, una transmisión o grupos de motores a botones del controlador en la configuración del dispositivo. Para obtener más información sobre cómo asignar botones al controlador en la configuración del dispositivo, consulte este artículo.

Menú de dispositivos VEXcode V5 con las opciones del controlador mostradas. El diagrama de los controles de los botones muestra que los dos joysticks impulsan el robot en una configuración de tracción tipo tanque. Los botones Arriba y Abajo controlan un grupo de motores del brazo (ArmMotorGroup), y los botones del eje R controlan un motor de garra (ClawMotor).

Resumen de la opción 1: Asignación de botones en la configuración del dispositivo

Ventajas Limitaciones Situación de ejemplo
  • Configuración rápida sin necesidad de codificación
  • Método más simple
  • Fácilmente ajustable
  • Puede asignar motores individuales, una transmisión estándar y grupos de motores a botones
  • Las asignaciones de botones están limitadas a la cantidad de botones en el controlador
  • La transmisión no puede exceder los 4 motores ni puede personalizarse (solo se admite una transmisión estándar, no una transmisión H, holonómica u otra transmisión personalizada)
  • Manipular una construcción estándar como un Speedbot, Clawbot o una simple modificación de esas construcciones estándar. Por ejemplo, un Speedbot con una toma fijada en la parte delantera controlada por un grupo motor.
  • Manipular qué botones corresponden a diferentes comportamientos en el robot rápidamente sin mucha codificación

Opción 2: Utilizar un bucle Forever

Si está utilizando una compilación personalizada en lugar de una compilación estándar, o desea poder tener más personalización en su Controlador, esta opción es una buena opción. Usar un bucle Forever es una excelente introducción para crear código personalizado para su controlador.

Esta opción coloca todas las condiciones para el controlador y sus botones asociados en un bucle permanente. Esto proporciona más flexibilidad, especialmente con diseños de compilación personalizados, pero también requiere cierta experiencia en codificación. Sin embargo, una consideración al utilizar esta opción es la duración y complejidad de su proyecto. Cuantas más condiciones se agreguen, más larga será la pila de códigos. Esto significa que se deben ejecutar varios bloques en orden y, cuando hay muchos bloques, esto puede ralentizar la ejecución del proyecto. Una ejecución más lenta del proyecto puede crear un retraso entre presionar los botones del Controlador y ver el comportamiento del robot.

El ejemplo específico que se muestra a continuación es una forma en que puede utilizar un bucle Forever con un robot de diseño personalizado (como un robot con una transmisión personalizada) para conducir el robot y manipular la garra y el brazo para interactuar con los objetos.

Espacio de trabajo VEXcode V5 con el proyecto de bloques de la Opción 2 abierto. El proyecto cuenta con una pila de bloques y dispositivos configurados. El menú Dispositivos se abre en un lateral y muestra los siguientes dispositivos: Controller1, ClawMotor en el puerto 3, ArmMotor en el puerto 8, LeftMotor en el puerto 1 y RightMotor en el puerto 10. En el espacio de trabajo se encuentra la pila de bloques para gestionar la entrada del controlador. La pila dice Cuando se inicia, configure ArmMotor deteniéndose en mantener y configure ClawMotor deteniéndose en mantener. El resto de la pila está contenido en un bucle Forever. Dice Para siempre, establece la velocidad del motor izquierdo en la posición del controlador 1, 3 %, y haz girar el motor izquierdo hacia adelante, establece la velocidad del motor derecho en la posición del controlador 1, 2 %, y haz girar el motor derecho hacia adelante. A continuación, si se presiona Controller1 Arriba, el motor del brazo girará hacia arriba; de lo contrario, si se presiona Controller1 Abajo, el motor del brazo girará hacia abajo; de lo contrario, el motor del brazo se detendrá. Por último, si se presiona el Controlador 1 A, el motor de garra se abre; si se presiona el Controlador 1 B, el motor de garra se cierra; y en caso contrario, el motor de garra se detiene.

Descargue el archivo de proyecto VEXcode V5 "Opción 2" >

Explicación del Código de la Opción 2.

Pieza de código Explicación
Primer plano de la pila de bloques en el proyecto VEXcode V5 Opción 2. Se han resaltado dos bloques que están fuera del bucle Forever de la pila; estos bloques dicen "establecer ArmMotor deteniéndose en modo de espera" y "establecer ClawMotor deteniéndose en modo de espera". Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "retener" garantizará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.
Primer plano de la pila de bloques en el proyecto VEXcode V5 Opción 2. Se destacan cuatro bloques dentro del bucle Forever de la pila. Leerán Forever, establecerán la velocidad del motor izquierdo en la posición del controlador 1 al 3 %, harán girar el motor izquierdo hacia adelante, establecerán la velocidad del motor derecho en la posición del controlador 1 al 2 %, y harán girar el motor derecho hacia adelante.

 

Controlador V5 para visualizar la disposición de sus botones.

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "retener" garantizará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

Se utiliza un bucle Forever para comprobar continuamente qué botones se están presionando en el controlador.

Los bloques [Establecer velocidad del motor] se utilizan para configurar la velocidad del motor en la posición actual del controlador a lo largo de los ejes 2 y 3. Esto equivale a poner un coche en marcha. Eso no necesariamente hace que el auto se mueva, simplemente lo fija.

Cada eje del joystick devuelve un valor entre -100 y +100 y devuelve un valor de cero cuando está centrado. Esto significa entonces que los ejes del joystick, cuando se presionan, equivalen a -100% a 100%. Cuanto más se empujen los ejes hacia 100 o -100, más rápido girará el motor.

Luego, el bloque [Spin] se utiliza para mover el motor. Esto equivale a pisar el acelerador del coche una vez fijada la dirección. Esto permite que cada motor sea controlado por uno de los cuatro ejes del controlador. 

Primer plano de la pila de bloques en el proyecto VEXcode V5 Opción 2. Dentro del bucle Forever de la pila se resalta un bloque if, else if, else. Lee si se presiona Controller1 Arriba, entonces gira ArmMotor hacia arriba; de lo contrario, si se presiona Controller1 Abajo, entonces gira ArmMotor hacia abajo; y de lo contrario, detiene ArmMotor.

 

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "retener" garantizará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

El bloque [If then else if then else] se utiliza para asignar ciertos comportamientos a los botones que se presionan o sueltan en el controlador. En esta sección de código, las condiciones establecidas son si se presionan los botones Arriba o Abajo. Si es así, se producirán ciertos comportamientos, como subir y bajar el brazo. También existe la otra parte de la condición: si no se presiona ningún botón, el brazo dejará de moverse.

Tenga en cuenta que la siguiente sección de código en el proyecto de Claw sigue la misma explicación.

Resumen de la opción 2: uso de un bucle indefinido

Ventajas Limitaciones Situación de ejemplo
  • Puede acomodar construcciones personalizadas, especialmente transmisiones con más de 4 motores.
  • Puede asignar múltiples comportamientos a un solo botón
  • Puede asignar comportamientos a diferentes ejes en el controlador (a diferencia de las únicas opciones de Left Arcade, Right Arcade, Split Arcade y Tank Drive en la configuración del dispositivo)
  • Requiere cierta cantidad de conocimientos de codificación (condicionales, bucles y conocimiento de los botones/joysticks del controlador)
  • Potencial de ejecución del proyecto más lenta o retraso en el tiempo de respuesta del botón. Dado que todos los comandos están contenidos en un único bucle Forever, la ejecución del código podría ejecutarse lentamente dependiendo de las condiciones establecidas y la longitud del código.
  • Uso del controlador con un robot personalizado, especialmente con una transmisión no estándar
  • Al querer asignar múltiples comportamientos a un solo botón. Por ejemplo, cuando se presiona el botón Arriba, la Garra puede abrirse, avanzar y luego cerrarse alrededor de un objeto.

Opción 3: Uso de eventos

Si desea mucha personalización en su controlador, usar eventos es la mejor opción para usted. Presionar un botón puede desencadenar múltiples comportamientos del robot, como presionar un botón para abrir la garra, levantar el brazo y avanzar una distancia determinada. Intentar codificar múltiples comportamientos por botón dentro de un bucle Forever haría que la ejecución del proyecto se ralentice dramáticamente; el uso de Eventos le permite hacerlo de manera más efectiva.

Esta opción utiliza Eventos para dividir el flujo del proyecto. Esto es similar al uso de un bucle Forever, pero permite que el código esté más organizado, de modo que la ejecución del botón tenga un tiempo de respuesta más rápido. Un tiempo de respuesta más rápido significa que no verá un retraso entre presionar los botones del controlador y ver el comportamiento del robot. Este ejemplo muestra los mismos comportamientos que el proyecto anterior, pero utilizando Eventos en lugar de Forever Loop.

Espacio de trabajo VEXcode EXP con el proyecto de bloques de la Opción 3 abierto. El proyecto consta de 11 pequeñas pilas de bloques y tiene dispositivos configurados. El menú Dispositivos se abre en un lateral y muestra los siguientes dispositivos: Controller1, ClawMotor en el puerto 3, ArmMotor en el puerto 8, LeftMotor en el puerto 1 y RightMotor en el puerto 10. En el espacio de trabajo se encuentran las 11 pequeñas pilas de bloques que gestionan la entrada del controlador. La primera pila dice Cuando se inicie, configure ArmMotor deteniéndose en "mantener" y luego configure ClawMotor deteniéndose en "mantener". La segunda pila dice Cuando se cambia el eje 3 del controlador 1, establece la velocidad del motor izquierdo en la posición 3 del controlador 1 % y luego haz girar el motor izquierdo hacia adelante. La tercera pila dice Cuando se cambia el eje 2 del controlador 1, establezca la velocidad del motor derecho en la posición 2 del controlador 1 % y luego haga girar el motor derecho hacia adelante. La cuarta pila dice: Cuando se presiona el botón Arriba del controlador 1, haga girar el motor del brazo hacia arriba. La quinta pila dice: Cuando se suelte el botón Arriba del controlador 1, detenga el motor del brazo. La sexta pila dice: Cuando se presiona el botón Abajo del Controlador1, haga girar el Motor del Brazo hacia abajo. La séptima pila dice: Cuando se suelte el botón Abajo del Controlador1, detenga el ArmMotor. La octava pila dice: Cuando se presiona el botón A del controlador 1, gire el motor de garra para abrirlo. La novena pila dice: Cuando se suelte el botón A del controlador 1, detenga el motor de la garra. La décima pila dice: Cuando se presiona el botón B del controlador 1, girar el motor de la garra hasta cerrarlo. La undécima y última pila dice: Cuando se suelte el botón B del controlador 1, detenga el motor de la garra.

Descargue el archivo de proyecto VEXcode V5 "Opción 3" >

Explicación del Código de la Opción 3.

Pieza de código Explicación
Primer plano de una pila de bloques en el proyecto VEXcode V5 Opción 3. La pila dice Cuando se inicia, configure ArmMotor deteniéndose en mantener y luego configure ClawMotor deteniéndose en mantener.
Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "retener" garantizará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.
Primer plano de dos pilas de bloques en el proyecto VEXcode V5 Opción 3. La primera pila dice Cuando se cambia el eje 3 del controlador 1, establece la velocidad del motor izquierdo en la posición 3 del controlador 1 % y luego haz girar el motor izquierdo hacia adelante. La segunda pila dice Cuando se cambia el eje 2 del controlador 1, establece la velocidad del motor derecho en la posición 2 del controlador 1 % y luego haz girar el motor derecho hacia adelante.

 

Controlador V5 para visualizar la disposición de sus botones.

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "retener" garantizará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

{When controller axis} Los bloques de eventos se utilizan para activar ciertos comportamientos cuando uno de los cuatro ejes del controlador se cambia mediante el uso de los joysticks.

Los bloques [Establecer velocidad del motor] se utilizan para configurar la velocidad del motor en la posición actual del controlador a lo largo de los ejes A y D. Esto equivale a poner un coche en marcha. Eso no necesariamente hace que el auto se mueva, simplemente lo fija.

Cada eje del joystick devuelve un valor entre -100 y +100 y devuelve un valor de cero cuando está centrado. Esto significa entonces que los ejes del joystick, cuando se presionan, equivalen a -100% a 100%. Cuanto más se empujen los ejes hacia 100 o -100, más rápido girará el motor.

Luego, el bloque [Spin] se utiliza para mover el motor. Esto equivale a pisar el acelerador del coche una vez fijada la dirección. Esto permite que cada motor sea controlado por uno de los cuatro ejes del controlador. 

Primer plano de cuatro pilas de bloques en el proyecto VEXcode V5 Opción 3. La primera pila dice: Cuando se presiona el botón Arriba del controlador 1, haga girar el motor del brazo hacia arriba. La segunda pila dice Cuando se suelta el botón Arriba del Controlador1, detenga el ArmMotor. La tercera pila dice: Cuando se presiona el botón Abajo del Controlador1, haga girar el Motor del Brazo hacia abajo. La cuarta pila dice: Cuando se suelte el botón Abajo del Controlador1, detenga el ArmMotor.

 

Se utilizó un Clawbot para este ejemplo de código. Cuando los botones del controlador se utilizan para subir y bajar el brazo, tan pronto como se suelta el botón, debido a la gravedad, el brazo volverá a caer. Configurar tanto el brazo como la garra en "retener" garantizará que tanto el brazo como la garra permanezcan en su lugar incluso después de que se hayan soltado los botones del controlador.

{When controller axis} Los bloques de eventos se utilizan para asignar ciertos comportamientos a los botones que se presionan o sueltan en el controlador. En esta sección de código, las condiciones establecidas son si se presionan los botones Arriba o Abajo. Si es así, se producirán ciertos comportamientos, como levantar, bajar o detener el brazo.

Tenga en cuenta que la última sección de código del proyecto de Claw sigue la misma explicación.

Resumen de la opción 3: uso de eventos

Ventajas Limitaciones Situación de ejemplo
  • Puede acomodar construcciones personalizadas, especialmente transmisiones con más de 4 motores.
  • Puede asignar múltiples comportamientos a un solo botón
  • Puede asignar comportamientos a diferentes ejes en el controlador (a diferencia de las únicas opciones de Left Arcade, Right Arcade, Split Arcade y Tank Drive en la configuración del dispositivo)
  • Ejecución de código más rápida y, por lo tanto, capacidad de respuesta de los botones (ya que cada condición se invoca por separado y no está integrada en una sola pila de código)
  • Requiere el mayor conocimiento de codificación de las opciones (condicionales, bucles, eventos y conocimiento de los botones/joysticks del controlador)
  • Uso del controlador con un robot personalizado, especialmente con una transmisión no estándar
  • Cuando desee asignar múltiples comportamientos a un solo botón sin demoras. Por ejemplo, cuando se presiona el botón Arriba, la Garra puede abrirse, avanzar y luego cerrarse alrededor de un objeto.

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: