95 lines
2.8 KiB
Java
95 lines
2.8 KiB
Java
// Copyright (c) FIRST and other WPILib contributors.
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
// the WPILib BSD license file in the root directory of this project.
|
|
|
|
package frc.robot.commands;
|
|
|
|
import java.util.Optional;
|
|
|
|
import edu.wpi.first.math.controller.PIDController;
|
|
import edu.wpi.first.wpilibj.DriverStation;
|
|
import edu.wpi.first.wpilibj.DriverStation.Alliance;
|
|
import edu.wpi.first.wpilibj.Timer;
|
|
import edu.wpi.first.wpilibj2.command.Command;
|
|
import frc.robot.subsystems.Lanceur;
|
|
import frc.robot.subsystems.Limelight3G;
|
|
|
|
/* You should consider using the more terse Command factories API instead https://docs.wpilib.org/en/stable/docs/software/commandbased/organizing-command-based.html#defining-commands */
|
|
public class Lancer extends Command {
|
|
private Lanceur lanceur;
|
|
private PIDController pidController;
|
|
private Limelight3G limeLight3G;
|
|
private Timer timer;
|
|
double vitesse = 0.5;
|
|
double botx = 0;
|
|
double boty = 0;
|
|
Optional<Alliance> alliance = DriverStation.getAlliance();
|
|
|
|
/** Creates a new Lancer. */
|
|
public Lancer(Lanceur lanceur, Limelight3G limeLight3G) {
|
|
this.lanceur = lanceur;
|
|
this.timer = new Timer();
|
|
this.limeLight3G = limeLight3G;
|
|
addRequirements(lanceur, limeLight3G);
|
|
// Use addRequirements() here to declare subsystem dependencies.
|
|
}
|
|
|
|
// Called when the command is initially scheduled.
|
|
@Override
|
|
public void initialize() {
|
|
if(limeLight3G.getV()){}
|
|
pidController = new PIDController(0.0007, 0,0, 0.001);
|
|
timer.reset();
|
|
alliance = DriverStation.getAlliance();
|
|
}
|
|
|
|
// Called every time the scheduler runs while the command is scheduled.
|
|
@Override
|
|
public void execute() {
|
|
double[] BotPose = new double[6];
|
|
if(limeLight3G.getV()){
|
|
if(!alliance.isPresent()){
|
|
return;
|
|
}
|
|
if(alliance.get() == Alliance.Blue){
|
|
BotPose = limeLight3G.getBotPoseBlue();
|
|
}
|
|
else{
|
|
BotPose = limeLight3G.getBotPoseRed();
|
|
}
|
|
botx = BotPose[0];
|
|
boty = BotPose[1];
|
|
vitesse = 410.57 * ((Math.sqrt(Math.pow(Math.abs(4.625594-botx), 2) + Math.pow(Math.abs(4.034536-boty), 2)))) + 2250;
|
|
}
|
|
if(limeLight3G.getV()){
|
|
|
|
|
|
double output = pidController.calculate(lanceur.Vitesse(),vitesse);
|
|
lanceur.Lancer(output);
|
|
System.out.println(output);
|
|
if(lanceur.Vitesse() >= vitesse-800){
|
|
timer.start();
|
|
if(timer.get() >1){
|
|
lanceur.Demeler(1);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
// Called once the command ends or is interrupted.
|
|
@Override
|
|
public void end(boolean interrupted) {
|
|
lanceur.Demeler(0);
|
|
lanceur.Lancer(0);
|
|
timer.reset();
|
|
timer.stop();
|
|
}
|
|
|
|
// Returns true when the command should end.
|
|
@Override
|
|
public boolean isFinished() {
|
|
return false;
|
|
}
|
|
}
|