WPILibC++  2020.3.2
DutyCycleEncoder.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2019 FIRST. All Rights Reserved. */
3 /* Open Source Software - may be modified and shared by FRC teams. The code */
4 /* must be accompanied by the FIRST BSD license file in the root directory of */
5 /* the project. */
6 /*----------------------------------------------------------------------------*/
7 
8 #pragma once
9 
10 #include <memory>
11 
12 #include <hal/SimDevice.h>
13 #include <hal/Types.h>
14 #include <units/units.h>
15 
16 #include "frc/AnalogTrigger.h"
17 #include "frc/Counter.h"
18 #include "frc/ErrorBase.h"
19 #include "frc/smartdashboard/Sendable.h"
20 #include "frc/smartdashboard/SendableHelper.h"
21 
22 namespace frc {
23 class DutyCycle;
24 class DigitalSource;
25 
31 class DutyCycleEncoder : public ErrorBase,
32  public Sendable,
33  public SendableHelper<DutyCycleEncoder> {
34  public:
40  explicit DutyCycleEncoder(int channel);
41 
47  explicit DutyCycleEncoder(DutyCycle& dutyCycle);
48 
54  explicit DutyCycleEncoder(DutyCycle* dutyCycle);
55 
61  explicit DutyCycleEncoder(std::shared_ptr<DutyCycle> dutyCycle);
62 
68  explicit DutyCycleEncoder(DigitalSource& digitalSource);
69 
75  explicit DutyCycleEncoder(DigitalSource* digitalSource);
76 
82  explicit DutyCycleEncoder(std::shared_ptr<DigitalSource> digitalSource);
83 
84  ~DutyCycleEncoder() override = default;
85 
87  DutyCycleEncoder& operator=(DutyCycleEncoder&&) = default;
88 
94  int GetFrequency() const;
95 
105  bool IsConnected() const;
106 
113  void SetConnectedFrequencyThreshold(int frequency);
114 
118  void Reset();
119 
127  units::turn_t Get() const;
128 
139  void SetDistancePerRotation(double distancePerRotation);
140 
147  double GetDistancePerRotation() const;
148 
155  double GetDistance() const;
156 
157  void InitSendable(SendableBuilder& builder) override;
158 
159  private:
160  void Init();
161 
162  std::shared_ptr<DutyCycle> m_dutyCycle;
163  AnalogTrigger m_analogTrigger;
164  Counter m_counter;
165  int m_frequencyThreshold = 100;
166  double m_positionOffset = 0;
167  double m_distancePerRotation = 1.0;
168  mutable units::turn_t m_lastPosition{0.0};
169 
170  hal::SimDevice m_simDevice;
171  hal::SimDouble m_simPosition;
172  hal::SimBoolean m_simIsConnected;
173 };
174 } // namespace frc
frc::DutyCycleEncoder::SetConnectedFrequencyThreshold
void SetConnectedFrequencyThreshold(int frequency)
Change the frequency threshold for detecting connection used by IsConnected.
frc::DutyCycleEncoder::GetFrequency
int GetFrequency() const
Get the frequency in Hz of the duty cycle signal from the encoder.
frc::DutyCycleEncoder::InitSendable
void InitSendable(SendableBuilder &builder) override
Initializes this Sendable object.
frc::DutyCycleEncoder::Reset
void Reset()
Reset the Encoder distance to zero.
frc::AnalogTrigger
Definition: AnalogTrigger.h:25
frc::DutyCycleEncoder
Class for supporting duty cycle/PWM encoders, such as the US Digital MA3 with PWM Output,...
Definition: DutyCycleEncoder.h:31
frc::DutyCycleEncoder::SetDistancePerRotation
void SetDistancePerRotation(double distancePerRotation)
Set the distance per rotation of the encoder.
frc::DutyCycle
Class to read a duty cycle PWM input.
Definition: DutyCycle.h:35
frc::ErrorBase
Base class for most objects.
Definition: ErrorBase.h:104
frc::Sendable
Interface for Sendable objects.
Definition: Sendable.h:17
frc::DutyCycleEncoder::Get
units::turn_t Get() const
Get the encoder value since the last reset.
frc::DutyCycleEncoder::GetDistancePerRotation
double GetDistancePerRotation() const
Get the distance per rotation for this encoder.
frc
A class that enforces constraints on the differential drive kinematics.
Definition: SPIAccelerometerSim.h:16
frc::DutyCycleEncoder::IsConnected
bool IsConnected() const
Get if the sensor is connected.
frc::DutyCycleEncoder::GetDistance
double GetDistance() const
Get the distance the sensor has driven since the last reset as scaled by the value from SetDistancePe...
frc::Counter
Class for counting the number of ticks on a digital input channel.
Definition: Counter.h:37
frc::DutyCycleEncoder::DutyCycleEncoder
DutyCycleEncoder(int channel)
Construct a new DutyCycleEncoder on a specific channel.
frc::DigitalSource
DigitalSource Interface.
Definition: DigitalSource.h:25
frc::SendableHelper
A helper class for use with objects that add themselves to SendableRegistry.
Definition: SendableHelper.h:28
frc::SendableBuilder
Definition: SendableBuilder.h:23