// 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 = 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; } }