Tay cm

Tay cm

Mở rộng chức năng tay cầm điều khiển để xử lý input linh hoạt hơn.

Mở rộng chức năng tay cầm điều khiển để xử lý input linh hoạt hơn.

Level

Intermediate

Source

Source

Author

Author

FTC Lib

FTC Lib

Translator

Translator

FTC26749 aDudu

FTC26749 aDudu

Date Published

Date Published

Jan 18, 2026

Jan 18, 2026

package com.arcrobotics.ftclib.gamepad
package com.arcrobotics.ftclib.gamepad

FTCLib cung cấp các tính năng Gamepad được nâng cao. Các lớp này về bản chất là các phần mở rộng của các tính năng Gamepad tiêu chuẩn trong FTC SDK, nhưng với các phương thức triển khai dễ sử dụng hơn.

GamepadKeys

Cung cấp các biểu diễn enum cho nút bấm, D-Pad, bumper, và trigger. Các nút bấm, D-Pad và bumper được lưu trong GamepadKeys.Button, còn trigger được lưu trong GamepadKeys.Trigger.

Buttons

  • Y

  • X

  • A

  • B

  • LEFT_BUMPER

  • RIGHT_BUMPER

  • BACK

  • START

  • DPAD_UP

  • DPAD_DOWN

  • DPAD_LEFT

  • DPAD_RIGHT

  • LEFT_STICK_BUTTON

  • RIGHT_STICK_BUTTON

Trigger

  • LEFT_TRIGGER

  • RIGHT_TRIGGER

// đây là các lớp từ GamepadButton được sử dụng
// cho các framework dựa trên command
GamepadButton grabButton = new GamepadButton(
    gamepad1, GamepadKeys.Button.A
);
GamepadButton releaseButton = new GamepadButton(
    gamepad2, GamepadKeys.Button.B
);
GamepadEx gamepadEx = new GamepadEx(gamepad1);
// đây là các lớp từ GamepadButton được sử dụng
// cho các framework dựa trên command
GamepadButton grabButton = new GamepadButton(
    gamepad1, GamepadKeys.Button.A
);
GamepadButton releaseButton = new GamepadButton(
    gamepad2, GamepadKeys.Button.B
);
GamepadEx gamepadEx = new GamepadEx(gamepad1);

GamepadEx

Là một phần mở rộng của lớp Gamepad tiêu chuẩn trong FTC SDK. Được khởi tạo đơn giản từ một đối tượng Gamepad. Cung cấp sáu phương thức lấy giá trị trực quan:

getButton()

Với một GamepadKeys.Button, phương thức này sẽ kiểm tra xem nút đó có đang được nhấn hay không, trả về giá trị boolean cho biết nút có được nhấn hay không.

gamepadEx.getButton(GamepadKeys.Button.A);
gamepadEx.getButton(GamepadKeys.Button.A);

getTrigger()

Với một GamepadKeys.Trigger, phương thức này sẽ trả về giá trị của trigger
(0 nếu không nhấn, 1 nếu nhấn hoàn toàn).

gamepadEx.getTrigger(GamepadKeys.Trigger.RIGHT_TRIGGER);
gamepadEx.getTrigger(GamepadKeys.Trigger.RIGHT_TRIGGER);

getLeftY()

Trả về giá trị trục y của joystick bên trái
(lưu ý rằng giá trị trả về là ngược dấu so với giá trị trả về từ đối tượng gamepad tiêu chuẩn).

gamepadEx.getLeftY();
gamepadEx.getLeftY();

getRightY()

Trả về giá trị trục y của joystick bên phải.

gamepadEx.getRightY();
gamepadEx.getRightY();

getLeftX()

Trả về giá trị trục x của joystick bên trái.

gamepadEx.getLeftX();
gamepadEx.getLeftX();

getRightX()

Trả về giá trị trục x của joystick bên phải.

gamepadEx.getRightX();
gamepadEx.getRightX();

KeyReader

Interface KeyReader là nền tảng cho các đối tượng theo dõi một nút hoặc trigger riêng lẻ trên gamepad.
Tất cả các lớp Reader phải triển khai các hàm sau:

  • readValue(): Đọc giá trị hiện tại của phím (true hoặc false) và cập nhật các giá trị được sử dụng bởi reader. Không trả về giá trị. Phương thức này phải được gọi một lần trong mỗi vòng lặp.

  • isDown(): Kiểm tra xem phím hiện tại có đang được nhấn hay không. Trả về giá trị boolean cho biết phím có đang được nhấn.

  • wasJustPressed(): Trả về boolean cho biết phím đang được nhấn, nhưng chỉ khi trước đó phím chưa được nhấn.

  • wasJustReleased(): Trả về boolean cho biết phím không còn được nhấn, nhưng chỉ khi trước đó phím đang được nhấn.

  • stateJustChanged: Trả về boolean cho biết giá trị của phím vừa mới thay đổi.

TriggerReader

Lớp TriggerReader triển khai interface KeyReader.
Do trigger trong GamepadEx trả về một giá trị kiểu double, lớp TriggerReader diễn giải một giá trị lớn hơn 0.5 là trigger đang được nhấn.

Đoạn sau tạo một TriggerReader mới với một GamepadEx và một GamepadKeys.Trigger.

TriggerReader triggerReader = new TriggerReader(
    gamepadEx, GamepadKeys.Trigger.RIGHT_TRIGGER
);
TriggerReader triggerReader = new TriggerReader(
    gamepadEx, GamepadKeys.Trigger.RIGHT_TRIGGER
);

Dưới đây là các phương thức khác nhau có thể sử dụng với trigger reader.

triggerReader.isDown();
triggerReader.readValue();
triggerReader.stateJustChanged();
triggerReader.wasJustPressed();
triggerReader.wasJustReleased();
triggerReader.isDown();
triggerReader.readValue();
triggerReader.stateJustChanged();
triggerReader.wasJustPressed();
triggerReader.wasJustReleased();

ButtonReader

Lớp ButtonReader triển khai interface KeyReader. Nó kiểm tra xem một nút đang được nhấn, vừa được nhấn, vừa được thả hay đang được giữ.

ButtonReader reader = new ButtonReader(
    gamepadEx, GamepadKeys.Button.A
);
ButtonReader reader = new ButtonReader(
    gamepadEx, GamepadKeys.Button.A
);
  • ButtonReader(GamepadEx gamepad, GamepadKeys.Button button):
    Tạo một ButtonReader mới với một GamepadEx và một GamepadKeys.Button.

  • ButtonReader(BooleanSupplier supplier):
    Tạo một ButtonReader mới sử dụng giá trị từ một BooleanSupplier thay vì gamepad, cho phép đọc trạng thái giá trị một cách dễ dàng mà không cần gamepad.

reader.readValue();
reader.wasJustPressed();
reader.stateJustChanged();
reader.isDown();
reader.wasJustReleased();
reader.readValue();
reader.wasJustPressed();
reader.stateJustChanged();
reader.isDown();
reader.wasJustReleased();

Các đối tượng GamepadEx thực chất đã chứa sẵn các ButtonReader.
Với mỗi GamepadKeys.Button, có một ButtonReader tương ứng được lưu trong một map.
Nó được lưu nội bộ dưới dạng Map<GamepadKeys.Button, ButtonReader>.
Điều này cho phép bạn sử dụng các tính năng này chỉ với lớp GamepadEx.

// tạo gamepad
GamepadEx myGamepad = new Gamepad(gamepad1);
/** Các phương thức sử dụng ButtonReader **/
myGamepad.wasJustPressed(GamepadKeys.Button.A);
myGamepad.stateJustChanged(GamepadKeys.Button.A);
myGamepad.isDown(GamepadKeys.Button.A);
myGamepad.wasJustReleased(GamepadKeys.Button.A);
// truyền GamepadKeys.Button mà bạn muốn đọc
// vào tham số của phương thức
// để đọc tất cả các nút cùng lúc, gọi một lần
myGamepad.readButtons();
/*
điều này tương đương với việc gọi readValue() một lần
cho tất cả các reader
*/
// tạo gamepad
GamepadEx myGamepad = new Gamepad(gamepad1);
/** Các phương thức sử dụng ButtonReader **/
myGamepad.wasJustPressed(GamepadKeys.Button.A);
myGamepad.stateJustChanged(GamepadKeys.Button.A);
myGamepad.isDown(GamepadKeys.Button.A);
myGamepad.wasJustReleased(GamepadKeys.Button.A);
// truyền GamepadKeys.Button mà bạn muốn đọc
// vào tham số của phương thức
// để đọc tất cả các nút cùng lúc, gọi một lần
myGamepad.readButtons();
/*
điều này tương đương với việc gọi readValue() một lần
cho tất cả các reader
*/

ToggleButtonReader

ToggleButtonReader toggleButtonReader = new ToggleButtonReader(
    gamepadEx, GamepadKeys.Button.A
);
ToggleButtonReader toggleButtonReader = new ToggleButtonReader(
    gamepadEx, GamepadKeys.Button.A
);

Lớp ToggleButtonReader mở rộng ButtonReader và bổ sung khả năng lấy trạng thái toggle.
Phương thức readValue() cần được chạy trong vòng lặp để lấy trạng thái của toggle.

  • getState(): Lấy giá trị toggle của một nút hoặc một boolean supplier.

toggleButtonReader.getState();
toggleButtonReader.getState();

Cách sử dụng (Usage)

GamepadEx toolOp = new GamepadEx(gamepad2);
ToggleButtonReader aReader = new ToggleButtonReader(
  toolOp, GamepadKeys.Button.A
);
while (...) {
  if (aReader.getState()) {
    // nếu trạng thái toggle là true
  } else {
    // nếu trạng thái toggle là false
  }
  aReader.readValue();
}
GamepadEx toolOp = new GamepadEx(gamepad2);
ToggleButtonReader aReader = new ToggleButtonReader(
  toolOp, GamepadKeys.Button.A
);
while (...) {
  if (aReader.getState()) {
    // nếu trạng thái toggle là true
  } else {
    // nếu trạng thái toggle là false
  }
  aReader.readValue();
}

ADUDU

A proud team of passionate Robotics Enthusiasts competing in nation-wide Technology competitions in Vietnam, the FIRST Tech Challenge and the FIRST Robotics Competition.

Copyright ©

, all rights reserved

Made by aDudu's Programming Department

made by aDudu

made by aDudu

Tay cầm