0% acharam este documento útil (0 voto)
7 visualizações3 páginas

Goat

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
7 visualizações3 páginas

Goat

Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 3

package org.firstinspires.ftc.

teamcode;

import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;
import com.qualcomm.robotcore.hardware.Servo;
import com.qualcomm.robotcore.hardware.DcMotor;
import com.qualcomm.robotcore.hardware.CRServo;

@com.qualcomm.robotcore.eventloop.opmode.TeleOp(name="StarterBot_V1_Java",
group="Linear Opmode")
public class StarterBot2025TeleOpJava extends LinearOpMode {

// Declaração dos componentes do robô


private DcMotor motorEsquerdo = null;
private DcMotor motorDireito = null;
private DcMotor motorBraco = null;
private DcMotor motorPulso = null;
private Servo garra = null;
private CRServo servoIntake = null;

// Posições-alvo para o braço e pulso em cada estado


private static final int POS_BRACO_INICIAL = 0;
private static final int POS_BRACO_COLETA = 0;
private static final int POS_BRACO_CESTO_BAIXO = 100;

// Enum para os estados do robô


private enum EstadoRobo {
INICIAL,
COLETA,
CESTO_BAIXO,
MANUAL
}

// Estado inicial do robô


private EstadoRobo estadoAtual = EstadoRobo.INICIAL;

/*
// Estado do toggle da garra
private boolean garraAberta = true;
private boolean ultimoBotaoB = false;
private boolean ultimoBotaoY = false;
private boolean ultimoGatilhoDireito = false;
*/
// Posições-alvo do braço e pulso
private int alvoBraco = 0;

@Override
public void runOpMode() {
// Inicializa os componentes do hardware
motorEsquerdo = hardwareMap.get(DcMotor.class, "motorEsquerdo");
motorDireito = hardwareMap.get(DcMotor.class, "motorDireito");
motorBraco = hardwareMap.get(DcMotor.class, "motorBraco");
motorPulso = hardwareMap.get(DcMotor.class, "motorPulso");
garra = hardwareMap.get(Servo.class, "garra");
servoIntake = hardwareMap.get(CRServo.class, "servoIntake");

// Reseta os encoders
motorEsquerdo.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
motorDireito.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
motorBracoA.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);
motorBracoB.setMode(DcMotor.RunMode.STOP_AND_RESET_ENCODER);

// Configura os motores para usar encoders


motorEsquerdo.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);
motorDireito.setMode(DcMotor.RunMode.RUN_WITHOUT_ENCODER);

// Configura a direção dos motores


motorEsquerdo.setDirection(DcMotor.Direction.REVERSE);
motorDireito.setDirection(DcMotor.Direction.FORWARD);

// Configura o comportamento dos motores em potência zero


motorBracoA.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
motorBracoB.setZeroPowerBehavior(DcMotor.ZeroPowerBehavior.BRAKE);
motorBracoB.setDirection(DcMotor.Direction.REVERSE);

// Aguarda o início da partida


waitForStart();

// Executa enquanto a partida está ativa


while (opModeIsActive()) {

// Lógica da máquina de estados


switch (estadoAtual) {
case INICIAL:
alvoBraco = POS_BRACO_INICIAL;
telemetry.addData("Estado", "INICIAL");
break;

case COLETA:
alvoBraco = POS_BRACO_COLETA;
telemetry.addData("Estado", "COLETA");
break;

case CESTO_BAIXO:
alvoBraco = POS_BRACO_CESTO_BAIXO;
telemetry.addData("Estado", "CESTO_BAIXO");
break;

case MANUAL:
telemetry.addData("Estado", "MANUAL");
break;
}
/*
// Transições de estado baseadas no controle
if (gamepad1.a) {
estadoAtual = EstadoRobo.COLETA;
} else if (gamepad1.b && !ultimoBotaoB) {
estadoAtual = (estadoAtual == EstadoRobo.PAREDE_AGARRAR) ?
EstadoRobo.PAREDE_DESPRENDER : EstadoRobo.PAREDE_AGARRAR;
} else if (gamepad1.y && !ultimoBotaoY) {
estadoAtual = (estadoAtual == EstadoRobo.HOVER_ALTO) ?
EstadoRobo.CLIP_ALTO : EstadoRobo.HOVER_ALTO;
} else if (gamepad1.x) {
estadoAtual = EstadoRobo.CESTO_BAIXO;
} else if (gamepad1.left_bumper) {
estadoAtual = EstadoRobo.INICIAL;
}

*/
//Transição rápida
if (gamepad1.a) {
estadoAtual = EstadoRobo.INICIAL;
} else if (gamepad1.x) {
estadoAtual = EstadoRobo.CESTO_BAIXO;
}

// Controle do intake
if (gamepad1.left_bumper) {
servoIntake.setPower(1.0);
} else if (gamepad1.right_bumper) {
servoIntake.setPower(-1.0);
} else {
servoIntake.setPower(0);
}

//CONTROLE PARA CLIMBER


if (gamepad1.right_trigger > 0.1) {
motorBracoA.setPower(1.0);
motorBracoB.setPower(1.0);
} else if (gamepad1.left_trigger > 0.1) {
motorBracoA.setPower(1.0);
motorBracoB.setPower(1.0);
} else {
motorBracoA.setPower(0);
motorBracoB.setPower(0);
}

// Controle de movimentação (Tank Drive)


double eixoEsquerdo = -gamepad1.left_stick_y;
double eixoDireito = gamepad1.right_stick_y;

motorEsquerdo.setPower(eixoEsquerdo);
motorDireito.setPower(eixoDireito);

// Controle do braço e pulso


motorBracoA.setTargetPosition(alvoBraco);
motorBracoB.setTargetPosition(alvoBraco);

motorBracoA.setPower(1);
motorBracoB.setPower(1);

// Envia os dados de telemetria


telemetry.addData("Posição do Braço",
motorBracoA.getCurrentPosition());
telemetry.update();
}
}
}

Você também pode gostar