mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-07-01 02:41:48 +00:00
51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
|
|
#include "DriveStraight.h"
|
||
|
|
#include "Robot.h"
|
||
|
|
|
||
|
|
DriveStraight::DriveStraight(double distance) {
|
||
|
|
Requires(Robot::drivetrain);
|
||
|
|
pid = new PIDController(4, 0, 0, new DriveStraightPIDSource(),
|
||
|
|
new DriveStraightPIDOutput());
|
||
|
|
pid->SetAbsoluteTolerance(0.01);
|
||
|
|
pid->SetSetpoint(distance);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Called just before this Command runs the first time
|
||
|
|
void DriveStraight::Initialize() {
|
||
|
|
// Get everything in a safe starting state.
|
||
|
|
Robot::drivetrain->Reset();
|
||
|
|
pid->Reset();
|
||
|
|
pid->Enable();
|
||
|
|
}
|
||
|
|
|
||
|
|
// Called repeatedly when this Command is scheduled to run
|
||
|
|
void DriveStraight::Execute() {}
|
||
|
|
|
||
|
|
// Make this return true when this Command no longer needs to run execute()
|
||
|
|
bool DriveStraight::IsFinished() {
|
||
|
|
return pid->OnTarget();
|
||
|
|
}
|
||
|
|
|
||
|
|
// Called once after isFinished returns true
|
||
|
|
void DriveStraight::End() {
|
||
|
|
// Stop PID and the wheels
|
||
|
|
pid->Disable();
|
||
|
|
Robot::drivetrain->Drive(0, 0);
|
||
|
|
}
|
||
|
|
|
||
|
|
// Called when another command which requires one or more of the same
|
||
|
|
// subsystems is scheduled to run
|
||
|
|
void DriveStraight::Interrupted() {
|
||
|
|
End();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
DriveStraightPIDSource::~DriveStraightPIDSource() {}
|
||
|
|
double DriveStraightPIDSource::PIDGet() {
|
||
|
|
return Robot::drivetrain->GetDistance();
|
||
|
|
}
|
||
|
|
|
||
|
|
DriveStraightPIDOutput::~DriveStraightPIDOutput() {}
|
||
|
|
void DriveStraightPIDOutput::PIDWrite(float d) {
|
||
|
|
Robot::drivetrain->Drive(d, d);
|
||
|
|
}
|