Controlador#

Introducción#

El controlador de drones VEX AIR cuenta con 12 botones y dos joysticks. Estas entradas permiten que el dron detecte las pulsaciones de los botones y los movimientos del joystick, lo que permite un control interactivo y ágil.

A continuación se muestra una lista de todos los métodos disponibles:

Getters: botón de lectura, joystick y estado de conexión.

  • pressing – Devuelve si se está presionando un botón específico en ese momento.

  • position – Devuelve la posición del joystick a lo largo de un eje especificado.

  • is_drone_connected – Devuelve si el controlador está conectado al dron.

  • get_battery_level – Devuelve el nivel de batería del controlador.

Devoluciones de llamadas: responden a cambios en la entrada del botón o del joystick.

  • pressed – Ejecuta una función cuando se presiona un botón específico.

  • released – Ejecuta una función cuando se suelta un botón específico.

  • changed – Ejecuta una función cuando la posición del joystick cambia a lo largo de un eje especificado.

Captadores#

pressing#

Al presionar pressing se devuelve un valor booleano que indica si se está presionando un botón específico del controlador. Este método debe llamarse en un objeto de botón específico, como button5 (consulte la lista completa de objetos de botón a continuación).

  • True - Se está pulsando el botón especificado.

  • False - El botón especificado no está siendo presionado.

Uso:
Se puede utilizar uno de los ocho botones disponibles, numerados del 5 al 12, con este método, como se muestra a continuación:

Botón

Dominio

button5

controller.button5.pressing() — Button 5

button6

controller.button6.pressing() — Button 6

button7

controller.button7.pressing() — Button 7

button8

controller.button8.pressing() — Button 8

button9

controller.button9.pressing() — Button 9

button10

controller.button10.pressing() — Button 10

button11

controller.button11.pressing() — Button 11

button12

controller.button12.pressing() — Button 12

Un controlador de dron VEX AIR que muestra los botones del 5 al 12. Los botones 5 y 6 están en la parte posterior del lado derecho del controlador, perpendiculares al joystick. Los botones 7 y 8 están en la misma posición en el lado izquierdo. Los botones del 9 al 12 están en la superficie inferior del controlador, con el 9 en la esquina superior derecha encima del 10, y el 11 en la esquina superior izquierda encima del 12.

Parámetros

Descripción

Este método no tiene parámetros.

# Take a picture when button 5 is pressed.
drone.take_off(climb_to=500)
while True:
    # Fly using the controller sticks
    drone.move_with_vectors(
        forward=controller.axis4.position(),
        rightward=controller.axis3.position(),
        upward=controller.axis1.position(),
        rotation=controller.axis2.position()
    )

    # Capture an image from the forward camera when button 5 is pressed.
    if controller.button5.pressing():
        drone.camera.capture_image(FORWARD_CAMERA)

    wait(5, MSEC)

position#

position returns the position of the joystick’s specified axis, as a percentage from –100% to 100%.

Uso:

Con este método se puede utilizar uno de los cuatro ejes disponibles, numerados del 1 al 4.

Eje

Dominio

axis1

controller.axis1.position() — El eje vertical del joystick izquierdo

axis2

controller.axis2.position() — El eje horizontal del joystick izquierdo

axis3

controller.axis3.position() — El eje horizontal del joystick derecho

axis4

controller.axis4.position() — El eje vertical del joystick derecho

Un controlador de dron VEX AIR con las etiquetas de los ejes 1 y 2 resaltadas alrededor del joystick izquierdo, y las etiquetas de los ejes 3 y 4 resaltadas alrededor del joystick derecho.

Parámetros

Descripción

Este método no tiene parámetros.

# Climb when the left joystick is moved up.
drone.take_off(climb_to=500)
while True:
    if controller.axis1.position() > 0:
        drone.climb(direction=UP, velocity=50)
    else:
        drone.hover()
    wait(5, MSEC)

is_drone_connected#

is_drone_connected devuelve un valor booleano que indica si el dron está conectado.

  • True - El dron está conectado.

  • False - El dron no está conectado.

Uso:

controller.is_drone_connected()

Parámetros

Descripción

Este método no tiene parámetros.

# Print controller connection status on screen.
while True:
    if controller.is_drone_connected():
        controller.screen.clear_screen()
        controller.screen.set_cursor(1, 1)
        controller.screen.print("Controller connected")
    wait(0.5, SECONDS)

get_battery_level#

get_battery_level devuelve el nivel de batería del controlador, como un porcentaje del 0% al 100%.

Uso:

controller.get_battery_level()

Parámetros

Descripción

Este método no tiene parámetros.

# Show controller's battery level.
if controller.get_battery_level() > 50:
    controller.screen.print("Battery level ok")
else:
    controller.screen.print("Battery level low")

Devoluciones de llamadas#

pressed#

pressed ejecuta una función cuando se pulsa el botón especificado. Una vez utilizada, la función se ejecutará automáticamente cada vez que se pulse dicho botón.

Uso:
Se puede utilizar uno de los ocho botones disponibles con este método, numerados del 5 al 12.

Botón

Dominio

button5

controller.button5.pressing() — Button 5

button6

controller.button6.pressing() — Button 6

button7

controller.button7.pressing() — Button 7

button8

controller.button8.pressing() — Button 8

button9

controller.button9.pressing() — Button 9

button10

controller.button10.pressing() — Button 10

button11

controller.button11.pressing() — Button 11

button12

controller.button12.pressing() — Button 12

Un controlador de dron VEX AIR que muestra los botones del 5 al 12. Los botones 5 y 6 están en la parte posterior del lado derecho del controlador, perpendiculares al joystick. Los botones 7 y 8 están en la misma posición en el lado izquierdo. Los botones del 9 al 12 están en la superficie inferior del controlador, con el 9 en la esquina superior derecha encima del 10, y el 11 en la esquina superior izquierda encima del 12.

Parámetros

Descripción

callback

Una función definida previamente para ejecutarse cada vez que se presione el botón especificado.

arg

Opcional. Una tupla que contiene los argumentos que se pasarán a la función de devolución de llamada. Consulte Uso de eventos con parámetros para obtener más información.

# Take a picture when button 5 is pressed.
def take_picture():
    drone.camera.capture_image(FORWARD_CAMERA)

# Run take_picture each time button 5 is pressed.
controller.button5.pressed(take_picture)

# Fly using the controller sticks.
drone.take_off(climb_to=500)
while True:
    drone.move_with_vectors(
        forward=controller.axis4.position(),
        rightward=controller.axis3.position(),
        upward=controller.axis1.position(),
        rotation=controller.axis2.position()
    )
    wait(5, MSEC)

released#

released ejecuta una función cuando se suelta el botón especificado. Una vez utilizada, la función se ejecutará automáticamente cada vez que se suelte dicho botón.

Uso:
Se puede utilizar uno de los ocho botones disponibles con este método, numerados del 5 al 12.

Botón

Dominio

button5

controller.button5.pressing() — Button 5

button6

controller.button6.pressing() — Button 6

button7

controller.button7.pressing() — Button 7

button8

controller.button8.pressing() — Button 8

button9

controller.button9.pressing() — Button 9

button10

controller.button10.pressing() — Button 10

button11

controller.button11.pressing() — Button 11

button12

controller.button12.pressing() — Button 12

Un controlador de dron VEX AIR que muestra los botones del 5 al 12. Los botones 5 y 6 están en la parte posterior del lado derecho del controlador, perpendiculares al joystick. Los botones 7 y 8 están en la misma posición en el lado izquierdo. Los botones del 9 al 12 están en la superficie inferior del controlador, con el 9 en la esquina superior derecha encima del 10, y el 11 en la esquina superior izquierda encima del 12.

Parámetros

Descripción

callback

Una función definida previamente para ejecutarse cada vez que se suelte el botón especificado.

arg

Opcional. Una tupla que contiene los argumentos que se pasarán a la función de devolución de llamada. Consulte Uso de funciones con parámetros para obtener más información.

# Take a picture when button 5 is released.
def take_picture():
    drone.camera.capture_image(FORWARD_CAMERA)

# Run take_picture each time button 5 is released.
controller.button5.released(take_picture)

# Fly using the controller sticks.
drone.take_off(climb_to=500)
while True:
    drone.move_with_vectors(
        forward=controller.axis4.position(),
        rightward=controller.axis3.position(),
        upward=controller.axis1.position(),
        rotation=controller.axis2.position()
    )
    wait(5, MSEC)

changed#

changed ejecuta una función cuando la posición del joystick cambia a lo largo del eje especificado. Una vez utilizada, la función se ejecutará automáticamente cada vez que la posición del joystick cambie a lo largo de ese eje.

Uso:

Con este método se puede utilizar uno de los cuatro ejes disponibles, numerados del 1 al 4.

Eje

Dominio

axis1

controller.axis1.position() — El eje vertical del joystick izquierdo

axis2

controller.axis2.position() — El eje horizontal del joystick izquierdo

axis3

controller.axis3.position() — El eje horizontal del joystick derecho

axis4

controller.axis4.position() — El eje vertical del joystick derecho

Un controlador de dron VEX AIR con las etiquetas de los ejes 1 y 2 resaltadas alrededor del joystick izquierdo, y las etiquetas de los ejes 3 y 4 resaltadas alrededor del joystick derecho.

Parámetros

Descripción

callback

Una función definida previamente para ejecutarse cada vez que la posición del joystick cambie a lo largo del eje especificado.

arg

Opcional. Una tupla que contiene los argumentos que se pasarán a la función de devolución de llamada. Consulte Uso de funciones con parámetros para obtener más información.

# Move forward when the left joystick moves.
def on_axis1_changed():
    drone.move_for(direction=0, distance=200, velocity=50, units=MM)

drone.take_off(climb_to=500)
controller.axis1.changed(on_axis1_changed)