4.4.20 Trigger

Sticks, Button and Triggere utilizând GamePad-ul

Pe GamePad avem Buttoane, Joystick-uri și Triggere(au senzitivitate). Programul pentru triggere, poate fi modificat pentru a utiliza Joystick-urile sau Buttoanele. Trigerele sunt folosite mai des pentru a controla brațe, glisiere etc. deoarece returnează o valoare între 0 și 1, în timp ce un Button returneză 0 sau 1.Folosind Triggere putem controla mult mai bine mișcarea glisierei sau a unui braț deoarece putem controla viteza în funcție de cât de tare apăsăm pe Trigger.

Defininim o variabilă

DCMotor motor1;

Mapăm variabila la hardware map

motor1 = hardwareMap.dcMotor.get(„left_arm”);

Setăm puterea motorului

motor1.setPower(gamepad1.left_trigger+gamepad1.right_trigger);

Trebuie să stabiliți care dintre Triggere va acționa motorul într-un sens și care în celălalt.

motor1.setPower(gamepad1.left_trigger+gamepad1.right_trigger);

În FTC, utilizarea triggerelor pentru a controla motoare sau alte mecanisme care necesită o mișcare fină este foarte comună, datorită valorilor continue pe care le returnează (între 0 și 1). Aceasta permite un control mai precis asupra vitezei și mișcării.

Mai jos este un exemplu de program care demonstrează cum să utilizați triggerele de pe GamePad pentru a controla un motor, dar și cum să utilizați joystick-urile sau butoanele pentru un control alternativ.

Cod pentru Controlul unui Motor folosind Triggere, Joystick-uri și Butoane

import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.hardware.DcMotor;

@TeleOp(name = "Motor Control")
public class MotorControl extends LinearOpMode {

private DcMotor motor;

@Override
public void runOpMode() {
// Inițializarea motorului
motor = hardwareMap.get(DcMotor.class, "motor");

// Așteaptă până când driverul apasă pe Play
waitForStart();

while (opModeIsActive()) {
// Controlul motorului folosind triggerul drept
double power = gamepad1.right_trigger;

// Alternativ: Controlul motorului folosind joystick-ul drept (valori între -1 și 1)
// double power = -gamepad1.right_stick_y;

// Alternativ: Controlul motorului folosind butoane (valori de 0 sau 1)
// double power = gamepad1.a ? 1.0 : 0.0;

// Setarea puterii motorului
motor.setPower(power);

// Afișarea valorii pe telemetry
telemetry.addData("Motor Power", power);
telemetry.update();
}
}
}

Explicații

  1. Inițializarea Motorului: Motorul este inițializat folosind hardwareMap.get.
  2. Controlul folosind Triggerul Drept:
    • gamepad1.right_trigger returnează o valoare între 0 și 1, care este folosită pentru a seta puterea motorului. Aceasta permite un control fin al vitezei motorului.
  3. Alternativ:
    • Joystick-ul Drept: Dacă dorești să controlezi motorul folosind joystick-ul drept, poți utiliza gamepad1.right_stick_y. Aceasta returnează valori între -1 și 1, unde 1 este deplasarea maximă înainte și -1 este deplasarea maximă înapoi.
    • Butoanele: Dacă dorești să controlezi motorul folosind butoanele, poți utiliza un buton precum gamepad1.a, care returnează 1 când este apăsat și 0 când nu este apăsat.

Ajustarea Programului pentru FTC

Acest exemplu simplu poate fi extins și ajustat pentru a controla alte mecanisme cum ar fi brațele sau glisierele, utilizând triggerele pentru un control mai precis. Acesta este doar un punct de plecare, iar în funcție de nevoile specifice ale robotului tău, poți ajusta și extinde funcționalitatea.

Cod Extins pentru Controlul unui Braț și unei Glisiere

@TeleOp(name = "Arm and Slide Control")
public class ArmAndSlideControl extends LinearOpMode {

private DcMotor armMotor;
private DcMotor slideMotor;

@Override
public void runOpMode() {
// Inițializarea motoarelor
armMotor = hardwareMap.get(DcMotor.class, "armMotor");
slideMotor = hardwareMap.get(DcMotor.class, "slideMotor");

// Așteaptă până când driverul apasă pe Play
waitForStart();

while (opModeIsActive()) {
// Controlul brațului folosind triggerul drept
double armPower = gamepad1.right_trigger;

// Controlul glisierei folosind triggerul stâng
double slidePower = gamepad1.left_trigger;

// Setarea puterii motorului pentru braț și glisieră
armMotor.setPower(armPower);
slideMotor.setPower(slidePower);

// Afișarea valorilor pe telemetry
telemetry.addData("Arm Motor Power", armPower);
telemetry.addData("Slide Motor Power", slidePower);
telemetry.update();
}
}
}

Explicații adiționale

  1. Controlul Brațului și Glisierei:
    • Folosind gamepad1.right_trigger pentru a controla brațul și gamepad1.left_trigger pentru a controla glisierea, poți avea un control fin asupra mișcării ambelor mecanisme.
  2. Telemetria: Afișarea puterii fiecărui motor pe telemetry pentru a monitoriza în timp real starea robotului.

Această abordare permite utilizarea eficientă a controlerului GamePad pentru a obține un control precis și fluid asupra componentelor robotului, esențial pentru succesul în competițiile FTC.