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
– Checks if a specific button is currently being pressed..position
– Returns the position of the joystick along a specified axis.is_drone_connected
– Returns whether or not the controller is connected to the drone.get_battery_level
– Returns the controller’s battery level.
Devoluciones de llamadas: responden a cambios en la entrada del botón o del joystick.
Captadores#
.pressing#
.pressing
returns if a specific controller button is being pressed. This method must be called on a specific button, such as button5
(see full list of buttons below). This will return either of the following:
True
: se está presionando el botón especificado.False
: no se está presionando el botón especificado.
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 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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. This will return an integer 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 |
---|---|
|
|
|
|
|
|
|
|
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
returns whether the drone is connected. This will return a Boolean value:
True
- The drone is connected.False
- The drone is not connected.
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
returns the Controller’s battery level as a percentage. This returns an integer from 0 to 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
registers a function to be called when a specific button on the controller is pressed. This method must be called on a specific button, such as button5
(see full list of buttons below).
Uso:
Se puede utilizar uno de los ocho botones disponibles con este método, numerados del 5 al 12.
Botón |
Dominio |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
Una función que se define previamente para ejecutarse cuando se presiona el botón especificado. |
|
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)
# Register the button press callback.
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
registra una función que se llamará al soltar un botón específico del controlador. Este método debe llamarse en un botón específico, como button5
(ver la lista completa de botones a continuación).
Uso:
Se puede utilizar uno de los ocho botones disponibles con este método, numerados del 5 al 12.
Botón |
Dominio |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
Una función que se define previamente para ejecutarse cuando se suelta el botón especificado. |
|
Opcional. Una tupla que contiene los argumentos que se pasan 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)
# Register the button released callback.
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
registers a function to be called when the joystick’s position changes.
Uso:
Con este método se puede utilizar uno de los cuatro ejes disponibles, numerados del 1 al 4.
Eje |
Dominio |
---|---|
|
|
|
|
|
|
|
|
Parámetros |
Descripción |
---|---|
|
Una función que se define previamente para ejecutarse cuando cambia el valor del eje. |
|
Opcional. Una tupla que contiene los argumentos que se pasan 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)