/*----------------------------------------------------------------------------*/ /* Copyright (c) FIRST 2011. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */ /*----------------------------------------------------------------------------*/ #ifndef __PID_COMMAND_H__ #define __PID_COMMAND_H__ #include "Commands/Command.h" #include "PIDSource.h" #include "PIDOutput.h" class PIDController; class PIDCommand : public Command, public PIDOutput, public PIDSource { public: PIDCommand(const char *name, double p, double i, double d); PIDCommand(const char *name, double p, double i, double d, double period); PIDCommand(const char *name, double p, double i, double d, double f, double perioid); PIDCommand(double p, double i, double d); PIDCommand(double p, double i, double d, double period); PIDCommand(double p, double i, double d, double f, double period); virtual ~PIDCommand(); void SetSetpointRelative(double deltaSetpoint); // PIDOutput interface virtual void PIDWrite(float output); // PIDSource interface virtual double PIDGet(); protected: PIDController *GetPIDController(); virtual void _Initialize(); virtual void _Interrupted(); virtual void _End(); void SetSetpoint(double setpoint); double GetSetpoint(); double GetPosition(); virtual double ReturnPIDInput() = 0; virtual void UsePIDOutput(double output) = 0; private: /** The internal {@link PIDController} */ PIDController *m_controller; public: virtual void InitTable(ITable* table); virtual std::string GetSmartDashboardType(); }; #endif