Controlador#
Introdução#
O comando drone VEX AIR possui um layout de 12 botões e dois joysticks. Estas entradas permitem que o drone detete o pressionar dos botões e os movimentos dos joysticks, possibilitando um controlo interativo e responsivo.
Segue-se uma lista de todos os métodos disponíveis:
Receptores – Ler o botão, o joystick e o estado da ligação.
pressing– Retorna se um botão específico está a ser premido no momento.position– Devolve a posição do joystick ao longo de um eixo especificado.is_drone_connected– Retorna se o controlador está ligado ao drone.get_battery_level– Retorna o nível da bateria do controlador.
Retornos de chamada – Respondem a alterações de entrada de botão ou joystick.
Getters#
pressing#
pressing returns a Boolean indicating whether a specific button on the controller is currently being pressed. This method must be called on a specific button object, such as button5 (see full list of button objects below).
True- O botão especificado está a ser premido.False- O botão especificado não está a ser premido.
Utilização:
Um dos oito botões disponíveis, numerados de 5 a 12, pode ser utilizado com este método, como se mostra abaixo:
Botão |
Comando |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Parâmetros |
Descrição |
|---|---|
Este método não tem 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%.
Utilização:
Com este método, pode ser utilizado um dos quatro eixos disponíveis, numerados de 1 a 4.
Eixo |
Comando |
|---|---|
|
|
|
|
|
|
|
|

Parâmetros |
Descrição |
|---|---|
Este método não tem 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 devolve um valor booleano indicando se o drone está ligado.
True- O drone está ligado.False- O drone não está ligado.
Utilização:
controller.is_drone_connected()
Parâmetros |
Descrição |
|---|---|
Este método não tem 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 devolve o nível da bateria do controlador, numa percentagem de 0% a 100%.
Utilização:
controller.get_battery_level()
Parâmetros |
Descrição |
|---|---|
Este método não tem 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")
Retornos de chamada#
pressed#
O comando pressed executa uma função quando o botão especificado é premido. Uma vez utilizado, a função será executada automaticamente sempre que este botão for pressionado.
Utilização:
Um dos oito botões disponíveis, numerados de 5 a 12, pode ser utilizado com este método.
Botão |
Comando |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Parâmetros |
Descrição |
|---|---|
|
Uma função previamente definida para ser executada sempre que o botão especificado for premido. |
|
Opcional. Uma tupla contendo argumentos para passar para a função de callback. Consulte Utilizar eventos com parâmetros para obter mais informações. |
# 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 executa uma função quando o botão especificado é libertado. Uma vez utilizada, a função será executada automaticamente sempre que este botão for libertado.
Utilização:
Um dos oito botões disponíveis, numerados de 5 a 12, pode ser utilizado com este método.
Botão |
Comando |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

Parâmetros |
Descrição |
|---|---|
|
Uma função previamente definida para ser executada sempre que o botão especificado for libertado. |
|
Opcional. Uma tupla contendo argumentos para passar para a função de callback. Consulte Utilizar funções com parâmetros para obter mais informações. |
# 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 executa uma função quando a posição do joystick muda ao longo do eixo especificado. Uma vez utilizada, a função será executada automaticamente sempre que a posição do joystick se altere ao longo desse eixo.
Utilização:
Com este método, pode ser utilizado um dos quatro eixos disponíveis, numerados de 1 a 4.
Eixo |
Comando |
|---|---|
|
|
|
|
|
|
|
|

Parâmetros |
Descrição |
|---|---|
|
Uma função previamente definida para ser executada sempre que a posição do joystick se altere ao longo do eixo especificado. |
|
Opcional. Uma tupla contendo argumentos para passar para a função de callback. Consulte Utilizar funções com parâmetros para obter mais informações. |
# 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)