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.

  • pressed – Executa uma função quando um botão especificado é premido.

  • released – Executa uma função quando um botão especificado é libertado.

  • changed – Executa uma função quando a posição do joystick muda ao longo de um eixo especificado.

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

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

Um controlador de drone VEX AIR mostrando os botões de 5 a 12. Os botões 5 e 6 estão na parte traseira do lado direito do controlador, perpendiculares ao joystick. Os botões 7 e 8 estão na mesma posição do lado esquerdo. Os botões 9 a 12 estão na superfície inferior do comando, com o 9 no canto superior direito por cima do 10 e o 11 no canto superior esquerdo por cima do 12.

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

axis1

controller.axis1.position() — O eixo vertical do joystick esquerdo

axis2

controller.axis2.position() — O eixo horizontal do joystick esquerdo

axis3

controller.axis3.position() — O eixo horizontal do joystick direito

axis4

controller.axis4.position() — O eixo vertical do joystick direito

Um controlador VEX AIR drone com os rótulos dos eixos 1 e 2 destacados em redor do joystick esquerdo e os rótulos dos eixos 3 e 4 destacados em redor do joystick direito.

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

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

Um controlador de drone VEX AIR mostrando os botões de 5 a 12. Os botões 5 e 6 estão na parte traseira do lado direito do controlador, perpendiculares ao joystick. Os botões 7 e 8 estão na mesma posição do lado esquerdo. Os botões 9 a 12 estão na superfície inferior do comando, com o 9 no canto superior direito por cima do 10 e o 11 no canto superior esquerdo por cima do 12.

Parâmetros

Descrição

callback

Uma função previamente definida para ser executada sempre que o botão especificado for premido.

arg

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

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

Um controlador de drone VEX AIR mostrando os botões de 5 a 12. Os botões 5 e 6 estão na parte traseira do lado direito do controlador, perpendiculares ao joystick. Os botões 7 e 8 estão na mesma posição do lado esquerdo. Os botões 9 a 12 estão na superfície inferior do comando, com o 9 no canto superior direito por cima do 10 e o 11 no canto superior esquerdo por cima do 12.

Parâmetros

Descrição

callback

Uma função previamente definida para ser executada sempre que o botão especificado for libertado.

arg

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

axis1

controller.axis1.position() — O eixo vertical do joystick esquerdo

axis2

controller.axis2.position() — O eixo horizontal do joystick esquerdo

axis3

controller.axis3.position() — O eixo horizontal do joystick direito

axis4

controller.axis4.position() — O eixo vertical do joystick direito

Um controlador VEX AIR drone com os rótulos dos eixos 1 e 2 destacados em redor do joystick esquerdo e os rótulos dos eixos 3 e 4 destacados em redor do joystick direito.

Parâmetros

Descrição

callback

Uma função previamente definida para ser executada sempre que a posição do joystick se altere ao longo do eixo especificado.

arg

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)