WPILibC++  2019.1.1-beta-2-22-gc405188
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
Encoder.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) 2008-2018 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/Types.h>
13 
14 #include "frc/Counter.h"
15 #include "frc/CounterBase.h"
16 #include "frc/ErrorBase.h"
17 #include "frc/PIDSource.h"
18 #include "frc/smartdashboard/SendableBase.h"
19 
20 namespace frc {
21 
22 class DigitalSource;
23 class DigitalGlitchFilter;
24 
40 class Encoder : public ErrorBase,
41  public SendableBase,
42  public CounterBase,
43  public PIDSource {
44  public:
45  enum IndexingType {
46  kResetWhileHigh,
47  kResetWhileLow,
48  kResetOnFallingEdge,
49  kResetOnRisingEdge
50  };
51 
75  Encoder(int aChannel, int bChannel, bool reverseDirection = false,
76  EncodingType encodingType = k4X);
77 
101  Encoder(DigitalSource* aSource, DigitalSource* bSource,
102  bool reverseDirection = false, EncodingType encodingType = k4X);
103 
127  Encoder(DigitalSource& aSource, DigitalSource& bSource,
128  bool reverseDirection = false, EncodingType encodingType = k4X);
129 
130  Encoder(std::shared_ptr<DigitalSource> aSource,
131  std::shared_ptr<DigitalSource> bSource, bool reverseDirection = false,
132  EncodingType encodingType = k4X);
133 
134  ~Encoder() override;
135 
136  Encoder(Encoder&& rhs);
137  Encoder& operator=(Encoder&& rhs);
138 
139  // CounterBase interface
149  int Get() const override;
150 
156  void Reset() override;
157 
169  double GetPeriod() const override;
170 
187  void SetMaxPeriod(double maxPeriod) override;
188 
198  bool GetStopped() const override;
199 
205  bool GetDirection() const override;
206 
215  int GetRaw() const;
216 
222  int GetEncodingScale() const;
223 
230  double GetDistance() const;
231 
240  double GetRate() const;
241 
248  void SetMinRate(double minRate);
249 
267  void SetDistancePerPulse(double distancePerPulse);
268 
275  double GetDistancePerPulse() const;
276 
285  void SetReverseDirection(bool reverseDirection);
286 
296  void SetSamplesToAverage(int samplesToAverage);
297 
307  int GetSamplesToAverage() const;
308 
309  double PIDGet() override;
310 
319  void SetIndexSource(int channel, IndexingType type = kResetOnRisingEdge);
320 
329  void SetIndexSource(const DigitalSource& source,
330  IndexingType type = kResetOnRisingEdge);
331 
332  int GetFPGAIndex() const;
333 
334  void InitSendable(SendableBuilder& builder) override;
335 
336  private:
354  void InitEncoder(bool reverseDirection, EncodingType encodingType);
355 
360  double DecodingScaleFactor() const;
361 
362  std::shared_ptr<DigitalSource> m_aSource; // The A phase of the quad encoder
363  std::shared_ptr<DigitalSource> m_bSource; // The B phase of the quad encoder
364  std::shared_ptr<DigitalSource> m_indexSource = nullptr;
365  HAL_EncoderHandle m_encoder = HAL_kInvalidHandle;
366 
367  friend class DigitalGlitchFilter;
368 };
369 
370 } // namespace frc
WPILib FRC namespace.
Definition: SPIAccelerometerSim.h:18
int GetSamplesToAverage() const
Get the Samples to Average which specifies the number of samples of the timer to average when calcula...
double GetRate() const
Get the current rate of the encoder.
void SetDistancePerPulse(double distancePerPulse)
Set the distance per pulse for this encoder.
void SetMaxPeriod(double maxPeriod) override
Sets the maximum period for stopped detection.
Class to read quad encoders.
Definition: Encoder.h:40
PIDSource interface is a generic sensor source for the PID class.
Definition: PIDSource.h:20
Class to enable glitch filtering on a set of digital inputs.
Definition: DigitalGlitchFilter.h:32
double GetDistancePerPulse() const
Get the distance per pulse for this encoder.
Interface for counting the number of ticks on a digital input channel.
Definition: CounterBase.h:21
bool GetDirection() const override
The last direction the encoder value changed.
int GetRaw() const
Gets the raw value from the encoder.
void Reset() override
Reset the Encoder distance to zero.
void InitSendable(SendableBuilder &builder) override
Initializes this Sendable object.
void SetReverseDirection(bool reverseDirection)
Set the direction sensing for this encoder.
int GetEncodingScale() const
The encoding scale factor 1x, 2x, or 4x, per the requested encodingType.
DigitalSource Interface.
Definition: DigitalSource.h:25
bool GetStopped() const override
Determine if the encoder is stopped.
void SetMinRate(double minRate)
Set the minimum rate of the device before the hardware reports it stopped.
Encoder(int aChannel, int bChannel, bool reverseDirection=false, EncodingType encodingType=k4X)
Encoder constructor.
Base class for most objects.
Definition: ErrorBase.h:74
void SetSamplesToAverage(int samplesToAverage)
Set the Samples to Average which specifies the number of samples of the timer to average when calcula...
Definition: SendableBase.h:19
double GetDistance() const
Get the distance the robot has driven since the last reset.
int Get() const override
Gets the current count.
Definition: SendableBuilder.h:23
void SetIndexSource(int channel, IndexingType type=kResetOnRisingEdge)
Set the index source for the encoder.
double GetPeriod() const override
Returns the period of the most recent pulse.