Valor 6800 1.0
Loading...
Searching...
No Matches
NeoController.h
1
2#pragma once
3
4#include <memory>
5#include <string>
6
7#include <rev/SparkMax.h>
8#include <rev/config/SparkMaxConfig.h>
9#include <rev/sim/SparkMaxSim.h>
10
11#include "valkyrie/controllers/BaseController.h"
12
13namespace valor {
14
15enum NeoControllerType { NEO, NEO_550 };
16
17class NeoController : public BaseController, rev::spark::SparkMax {
18 public:
19 NeoController(valor::NeoControllerType, int canID, valor::NeutralMode mode, bool inverted);
20
21 static constexpr frc::DCMotor getMotorSpec(NeoControllerType controllerType) {
22 switch (controllerType) {
23 case NEO_550:
24 return frc::DCMotor::NEO550();
25 default:
26 return frc::DCMotor::NEO();
27 }
28 }
29
30 void reset() override;
31
32 void applyConfig() override;
33
34 units::turn_t getPosition() override;
35
36 units::ampere_t getCurrent() override;
37
38 units::turns_per_second_t getSpeed() override;
39
40 void setEncoderPosition(units::turn_t position) override;
41
42 units::turn_t getAbsEncoderPosition() override;
43
44 void setContinuousWrap(bool wrap, bool saveImmediately = false);
45
46 void positionSetter(units::turn_t positon, int slot = 0) override;
47 void speedSetter(units::turns_per_second_t speed, int slot = 0) override;
48
49 void setupFollower(int canID, bool followerInverted = false) override;
50
51 void setPIDF(valor::PIDF pidf, int slot = 0, bool saveImmediately = false) override;
52
53 void setForwardLimit(units::turn_t forward, bool saveImmediately = false) override;
54
55 void setReverseLimit(units::turn_t reverse, bool saveImmediately = false) override;
56
57 void setGearRatios(double rotorToSensor, double sensorToMech, bool saveImmediately = false) override;
58
59 void setCurrentLimits(units::ampere_t statorCurrentLimit, units::ampere_t supplyCurrentLimit, units::ampere_t supplyCurrentThreshold,
60 units::second_t supplyTimeThreshold, bool saveImmediately = false);
61
62 void setNeutralMode(valor::NeutralMode mode, bool saveImmediately = false);
63
64 void setOpenLoopRamp(units::second_t time, bool saveImmediately = false) override;
65
66 void powerSetter(units::volt_t voltage) override;
67
68 void LoggablePeriodic() override;
69
70 units::volt_t calculateAppliedVoltage() override;
71
72 void setSimState(frc::sim::DCMotorSim&) override;
73
74 private:
75 valor::PIDF pidf;
76 rev::spark::SparkMaxConfig config;
77 std::unique_ptr<rev::spark::SparkMax> followerMotor;
78 rev::spark::SparkMaxSim sim;
79 double reqPosition;
80};
81} // namespace valor
Abstract class that all Valor controllers's should implement.
Definition BaseController.h:53
T ReadLog(std::string_view field, const T &defaultValue={})
Read a value from NetworkTables for the given field.
Definition Loggable.h:343
Definition NeoController.h:17
void speedSetter(units::turns_per_second_t speed, int slot=0) override
Send the motor to a specific speed.
void setPIDF(valor::PIDF pidf, int slot=0, bool saveImmediately=false) override
Change the PIDF values for the motor.
units::ampere_t getCurrent() override
Get the motors output current.
units::turns_per_second_t getSpeed() override
Get the motors speed.
void setupFollower(int canID, bool followerInverted=false) override
If a motor is paired with another motor, setup that other motor as a follower.
void setGearRatios(double rotorToSensor, double sensorToMech, bool saveImmediately=false) override
Set the gear ratios for the motor.
void setReverseLimit(units::turn_t reverse, bool saveImmediately=false) override
Set the reverse soft limit for the motor.
void setForwardLimit(units::turn_t forward, bool saveImmediately=false) override
Set the forward soft limit for the motor.
units::turn_t getPosition() override
Get the motors position.
void reset() override
Resets the motor and any state.
void positionSetter(units::turn_t positon, int slot=0) override
Send the motor to a specific position.
void LoggablePeriodic() override
Periodic callback for logging updates.
Container to hold PID and feed forward values for the motor controller.
Definition PIDF.h:22