Контроллер#

Введение#

Контроллер V5 имеет кнопки, два джойстика, вибромотор и экран. Методы управления контроллером позволяют проверять нажатия кнопок, считывать движения джойстика, вибрировать контроллер, включать или отключать настроенные действия контроллера, запускать функции при возникновении событий контроллера или отображать текст на экране контроллера.

Настроенные действия контроллера — это параметры поведения контроллера, заданные в меню «Устройства». Используйте значение remote_control_code_enabled чтобы временно включить или отключить эти настроенные действия в рамках проекта.

На этой странице в качестве примера имени контроллера используется controller_1 При необходимости замените его на собственное имя.

Ниже приведён список всех доступных методов:

Действия — Вибрация контроллера или включение/отключение настроенных действий контроллера.

  • rumble — Воспроизводит вибрационный паттерн на контроллере.

  • remote_control_code_enabled — Включает или отключает действия контроллера, настроенные в меню «Устройства».

Экран — Отображение текста и цифр на экране контроллера.

  • print — Отображает текст, числа или значения переменных на экране контроллера.

  • set_cursor — Перемещает курсор в указанную строку и столбец на экране контроллера.

  • column — Возвращает текущий столбец курсора на экране контроллера.

  • row — Возвращает текущую строку курсора на экране контроллера.

  • clear_screen — Очищает экран контроллера.

  • clear_row — Очищает одну строку на экране контроллера.

  • next_row — Перемещает курсор на следующую строку на экране контроллера.

Геттеры — считывают состояние кнопок и положение джойстика.

  • .pressing — Возвращает значение, указывающее, нажата ли указанная кнопка.

  • .position — Возвращает положение указанной оси джойстика.

Обратные вызовы — Запускают функции при изменении входных данных контроллера.

  • .pressed — Выполняет функцию при нажатии указанной кнопки.

  • .released — Выполняет функцию при отпускании указанной кнопки.

  • .changed — Выполняет функцию при изменении положения джойстика вдоль указанной оси.

Конструктор — Создание объекта контроллера вручную.

  • Controller — Создает объект Controller.

Действия#

rumble#

rumble воспроизводит вибрационный паттерн на контроллере. В строке паттерна точки обозначают короткие вибрационные сигналы, дефисы — длинные, а пробелы — паузы.

Usage:
controller_1.rumble(pattern)

Параметр

Описание

pattern

Строка, состоящая из точек, дефисов и пробелов, которые представляют собой паттерн гудения.

# Rumble the Controller with a short-short-long-long pattern
controller_1.rumble("..--")

remote_control_code_enabled#

remote_control_code_enabled — это переменная, которая включает или отключает действия контроллера, настроенные в меню «Устройства». Действия, настроенные контроллером, включены по умолчанию.

Usage:
remote_control_code_enabled = state

Ценить

Описание

True

Включает действия, настроенные контроллером.

False

Отключает действия, настроенные контроллером.

# Drive forward or backward using the left joystick
remote_control_code_enabled = False

while True:
    if controller_1.axis3.position() > 0:
        drivetrain.drive(FORWARD)
    elif controller_1.axis3.position() < 0:
        drivetrain.drive(REVERSE)
    # Press A to use Controller configured actions again
    elif controller_1.buttonA.pressing():
        break
    else:
        drivetrain.stop()

    wait(20, MSEC)

remote_control_code_enabled = True

Экран#

Экран контроллера V5 имеет 3 строки и 19 столбцов для отображения текста и чисел.

Скриншот экрана контроллера V5, показывающий строки и столбцы в области печати. ​​Строка 1, столбец 1 начинается в верхнем левом углу, а строка 3, столбец 19 — в нижнем правом углу.

print#

controller_1.screen.print отображает текст, числа или значения переменных на экране контроллера, используя текущую позицию курсора.

Usage:
controller_1.screen.print(value, sep, precision)

Параметр

Описание

value

Текст, число или значение переменной для отображения на экране контроллера. Можно вывести несколько значений, разделяя их запятыми.

sep

Необязательный параметр. Строка, которая будет помещена между значениями. Ее необходимо указывать в качестве ключевого аргумента, например, sep=”- “. Значение по умолчанию — ” “.

precision

Необязательный параметр. Количество десятичных знаков, отображаемых при выводе простых чисел. Этот параметр необходимо указывать в качестве ключевого аргумента, например, precision=2Значение по умолчанию — 2.

# Print a number on the Controller screen
controller_1.screen.print(1)

# Print multiple numbers separated by hyphens
controller_1.screen.print(1, 2, 3, 4, sep="-")

# Print a number using one decimal place
controller_1.screen.print(1 / 3, precision=1)

set_cursor#

set_cursor перемещает курсор в указанную строку и столбец на экране контроллера. Следующее выведенное значение появится в этой позиции.

Usage:
controller_1.screen.set_cursor(row, col)

Параметр

Описание

row

Строка курсора, от 1 до 3.

col

Столбец курсора, от 1 до 19.

# Print text at row 2, column 1
controller_1.screen.set_cursor(2, 1)
controller_1.screen.print("Ready")

column#

column возвращает текущий столбец, в котором будет выводиться текст на экран контроллера.

Usage:
controller_1.screen.column()

Параметры

Описание

Этот метод не имеет параметров.

# Print the current column number
controller_1.screen.set_cursor(2, 3)
controller_1.screen.print(controller_1.screen.column())

row#

row возвращает текущую строку, в которой будет выводиться текст на экран контроллера.

Usage:
controller_1.screen.row()

Параметры

Описание

Этот метод не имеет параметров.

# Print the current row number
controller_1.screen.set_cursor(2, 3)
controller_1.screen.print(controller_1.screen.row())

clear_screen#

clear_screen очищает экран контроллера и возвращает курсор в исходное положение.

Usage:
controller_1.screen.clear_screen()

Параметры

Описание

Этот метод не имеет параметров.

# Print text, then clear the Controller screen
controller_1.screen.print("VEX V5")
wait(2, SECONDS)
controller_1.screen.clear_screen()

clear_row#

clear_row очищает одну строку на экране контроллера.

Usage:
controller_1.screen.clear_row(row)

Параметр

Описание

row

Необязательно. Строка для очистки, от 1 до 3Если строка не указана, очищается текущая строка курсора.

# Clear row 2 on the Controller screen
controller_1.screen.clear_row(2)

next_row#

next_row перемещает курсор в столбец 1 следующей строки экрана контроллера. Следующее выводимое значение появится в этой строке.

Usage:
controller_1.screen.next_row()

Параметры

Описание

Этот метод не имеет параметров.

# Print on two rows
controller_1.screen.print("VEX V5")
controller_1.screen.next_row()
controller_1.screen.print("Controller")

Геттеры#

.pressing#

.pressing возвращает значение, указывающее, нажата ли в данный момент конкретная кнопка на контроллере. Этот метод необходимо вызывать для конкретного объекта кнопки, например, controller_1.buttonA.

  • True — Указанная кнопка нажата.

  • False — Указанная кнопка не нажата.

Использование:
С этим методом можно использовать один из доступных объектов кнопок:

Передняя и задняя стороны контроллера V5 с кнопками, выделенными желтым цветом. На поверхности контроллера слева расположены кнопки со стрелками вверх, вниз, влево и вправо, а справа — кнопки X, A, B, Y по часовой стрелке, начиная с положения «12 часов». На задней стороне контроллера слева и справа расположены кнопки L1, L2, R1 и R2 соответственно.

Кнопка

Командование

buttonA

controller_1.buttonA.pressing() — Кнопка A

buttonB

controller_1.buttonB.pressing() — Кнопка B

buttonX

controller_1.buttonX.pressing() — Кнопка X

buttonY

controller_1.buttonY.pressing() — Кнопка Y

buttonDown

controller_1.buttonDown.pressing() — Кнопка Вниз

buttonUp

controller_1.buttonUp.pressing() — Кнопка Вверх

buttonLeft

controller_1.buttonLeft.pressing() — Левая кнопка

buttonRight

controller_1.buttonRight.pressing() — Правая кнопка

buttonL1

controller_1.buttonL1.pressing() — Кнопка L1

buttonL2

controller_1.buttonL2.pressing() — Кнопка L2

buttonR1

controller_1.buttonR1.pressing() — Кнопка R1

buttonR2

controller_1.buttonR2.pressing() — Кнопка R2

Параметры

Описание

Этот метод не имеет параметров.

# Turn right while L1 is pressed
while True:
    if controller_1.buttonL1.pressing():
        drivetrain.turn(RIGHT)
    else:
        drivetrain.stop()

    wait(20, MSEC)

.position#

.position возвращает положение оси джойстика в виде числа от -100 до 100.

Этот метод необходимо вызывать для конкретного объекта оси, например, controller_1.axis1.

Использование:
С этим методом можно использовать один из доступных объектов оси:

Контроллер VEX V5 с обозначенными осями вокруг джойстиков. Ось 1 и 2 расположены вокруг правого джойстика, а ось 3 и 4 — вокруг левого.

Ось

Командование

axis1

controller_1.axis1.position() — Горизонтальная ось правого джойстика

axis2

controller_1.axis2.position() — Вертикальная ось правого джойстика

axis3

controller_1.axis3.position() — Вертикальная ось левого джойстика

axis4

controller_1.axis4.position() — Горизонтальная ось левого джойстика

Параметры

Описание

Этот метод не имеет параметров.

# Turn with the left joystick
remote_control_code_enabled = False

while True:
    if controller_1.axis4.position() > 10:
        drivetrain.turn(RIGHT)
    elif controller_1.axis4.position() < -10:
        drivetrain.turn(LEFT)
    else:
        drivetrain.stop()

    wait(20, MSEC)

Обратные звонки#

.pressed#

.pressed запускает функцию при нажатии указанной кнопки. После использования функция будет запускаться автоматически каждый раз при нажатии этой кнопки.

Использование:
С этим методом можно использовать один из доступных объектов кнопок:

Передняя и задняя стороны контроллера V5 с кнопками, выделенными желтым цветом. На поверхности контроллера слева расположены кнопки со стрелками вверх, вниз, влево и вправо, а справа — кнопки X, A, B, Y по часовой стрелке, начиная с положения «12 часов». На задней стороне контроллера слева и справа расположены кнопки L1, L2, R1 и R2 соответственно.

Кнопка

Командование

buttonA

controller_1.buttonA.pressed(callback, arg) — Кнопка A

buttonB

controller_1.buttonB.pressed(callback, arg) — Кнопка B

buttonX

controller_1.buttonX.pressed(callback, arg) — Кнопка X

buttonY

controller_1.buttonY.pressed(callback, arg) — Кнопка Y

buttonDown

controller_1.buttonDown.pressed(callback, arg) — Кнопка Вниз

buttonUp

controller_1.buttonUp.pressed(callback, arg) — Кнопка Вверх

buttonLeft

controller_1.buttonLeft.pressed(callback, arg) — Левая кнопка

buttonRight

controller_1.buttonRight.pressed(callback, arg) — Кнопка Правая

buttonL1

controller_1.buttonL1.pressed(callback, arg) — Кнопка L1

buttonL2

controller_1.buttonL2.pressed(callback, arg) — Кнопка L2

buttonR1

controller_1.buttonR1.pressed(callback, arg) — Кнопка R1

buttonR2

controller_1.buttonR2.pressed(callback, arg) — Кнопка R2

Параметр

Описание

callback

Предварительно определенная функция, которая будет выполняться каждый раз при нажатии указанной кнопки.

arg

Необязательно. Кортеж, содержащий аргументы для передачи в функцию обратного вызова. См. Использование событий с параметрами для получения дополнительной информации.

# Drive forward when A is pressed
def drive_forward():
    drivetrain.drive_for(FORWARD, 100, MM)

controller_1.buttonA.pressed(drive_forward)

.released#

.released запускает функцию при отпускании указанной кнопки. После использования функция будет запускаться автоматически каждый раз при отпускании этой кнопки.

Использование:
С этим методом можно использовать один из доступных объектов кнопок:

Передняя и задняя стороны контроллера V5 с кнопками, выделенными желтым цветом. На поверхности контроллера слева расположены кнопки со стрелками вверх, вниз, влево и вправо, а справа — кнопки X, A, B, Y по часовой стрелке, начиная с положения «12 часов». На задней стороне контроллера слева и справа расположены кнопки L1, L2, R1 и R2 соответственно.

Кнопка

Командование

buttonA

controller_1.buttonA.released(callback, arg) — Кнопка A

buttonB

controller_1.buttonB.released(callback, arg) — Кнопка B

buttonX

controller_1.buttonX.released(callback, arg) — Кнопка X

buttonY

controller_1.buttonY.released(callback, arg) — Кнопка Y

buttonDown

controller_1.buttonDown.released(callback, arg) — Кнопка Вниз

buttonUp

controller_1.buttonUp.released(callback, arg) — Кнопка Вверх

buttonLeft

controller_1.buttonLeft.released(callback, arg) — Левая кнопка

buttonRight

controller_1.buttonRight.released(callback, arg) — Кнопка Правая

buttonL1

controller_1.buttonL1.released(callback, arg) — Кнопка L1

buttonL2

controller_1.buttonL2.released(callback, arg) — Кнопка L2

buttonR1

controller_1.buttonR1.released(callback, arg) — Кнопка R1

buttonR2

controller_1.buttonR2.released(callback, arg) — Кнопка R2

Параметр

Описание

callback

Предварительно определенная функция, которая будет выполняться каждый раз, когда указанная кнопка отпускается.

arg

Необязательно. Кортеж, содержащий аргументы для передачи в функцию обратного вызова. См. Использование событий с параметрами для получения дополнительной информации.

# Drive backward when A is released
def back_up():
    drivetrain.drive_for(REVERSE, 100, MM)

controller_1.buttonA.released(back_up)

.changed#

Функция .changed запускает функцию при изменении положения джойстика вдоль указанной оси. После использования функция будет запускаться автоматически каждый раз при изменении положения джойстика вдоль этой оси.

Использование:
С этим методом можно использовать один из доступных объектов оси:

Контроллер VEX V5 с обозначенными осями вокруг джойстиков. Ось 1 и 2 расположены вокруг правого джойстика, а ось 3 и 4 — вокруг левого.

Ось

Командование

axis1

controller_1.axis1.changed(callback, arg) — Горизонтальная ось правого джойстика

axis2

controller_1.axis2.changed(callback, arg) — Вертикальная ось правого джойстика

axis3

controller_1.axis3.changed(callback, arg) — Вертикальная ось левого джойстика

axis4

controller_1.axis4.changed(callback, arg) — Горизонтальная ось левого джойстика

Параметр

Описание

callback

Предварительно определенная функция, которая запускается каждый раз, когда положение джойстика изменяется вдоль указанной оси.

arg

Необязательно. Кортеж, содержащий аргументы для передачи в функцию обратного вызова. См. Использование событий с параметрами для получения дополнительной информации.

# Play a sound when the left joystick moves
def tada_sound():
    brain.play_sound(SoundType.TADA)

controller_1.axis4.changed(tada_sound)

Строители#

Controller#

Controller создает объект Controller. Создание объекта Controller вручную необходимо только при настройке контроллера вне VEXcode.

Usage:
Controller(controller_type)

Параметр

Описание

controller_type

Необязательно. Тип создаваемого контроллера: PRIMARY для основного контроллера, подключенного к Brain, или PARTNER для второго контроллера, подключенного к Brain.

# Create the primary Controller
controller_1 = Controller(PRIMARY)

# Create a partner Controller
controller_2 = Controller(PARTNER)