blob: d67c063923b62eb4379aaf17849bce790b9cb9b1 [file] [log] [blame]
Brian Silverman26e4e522015-12-17 01:56:40 -05001/*----------------------------------------------------------------------------*/
2/* Copyright (c) FIRST 2011. All Rights Reserved.
3 */
4/* Open Source Software - may be modified and shared by FRC teams. The code */
5/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
6/*----------------------------------------------------------------------------*/
7
8#ifndef __PID_COMMAND_H__
9#define __PID_COMMAND_H__
10
11#include "Commands/Command.h"
12#include "PIDController.h"
13#include "PIDSource.h"
14#include "PIDOutput.h"
15
16#include <memory>
17
18class PIDCommand : public Command, public PIDOutput, public PIDSource {
19 public:
20 PIDCommand(const std::string &name, double p, double i, double d);
21 PIDCommand(const std::string &name, double p, double i, double d, double period);
22 PIDCommand(const std::string &name, double p, double i, double d, double f,
23 double period);
24 PIDCommand(double p, double i, double d);
25 PIDCommand(double p, double i, double d, double period);
26 PIDCommand(double p, double i, double d, double f, double period);
27 virtual ~PIDCommand() = default;
28
29 void SetSetpointRelative(double deltaSetpoint);
30
31 // PIDOutput interface
32 virtual void PIDWrite(float output);
33
34 // PIDSource interface
35 virtual double PIDGet();
36
37 protected:
38 std::shared_ptr<PIDController> GetPIDController() const;
39 virtual void _Initialize();
40 virtual void _Interrupted();
41 virtual void _End();
42 void SetSetpoint(double setpoint);
43 double GetSetpoint() const;
44 double GetPosition();
45
46 virtual double ReturnPIDInput() = 0;
47 virtual void UsePIDOutput(double output) = 0;
48
49 private:
50 /** The internal {@link PIDController} */
51 std::shared_ptr<PIDController> m_controller;
52
53 public:
54 virtual void InitTable(std::shared_ptr<ITable> table);
55 virtual std::string GetSmartDashboardType() const;
56};
57
58#endif