WPILibC++  unspecified
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Pages
AnalogInput.h
1 /*----------------------------------------------------------------------------*/
2 /* Copyright (c) FIRST 2008-2016. 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 #include <string>
12 
13 #include "HAL/Types.h"
14 #include "LiveWindow/LiveWindowSendable.h"
15 #include "PIDSource.h"
16 #include "SensorBase.h"
17 
18 namespace frc {
19 
32 class AnalogInput : public SensorBase,
33  public PIDSource,
34  public LiveWindowSendable {
35  friend class AnalogTrigger;
36  friend class AnalogGyro;
37 
38  public:
39  static const int kAccumulatorModuleNumber = 1;
40  static const int kAccumulatorNumChannels = 2;
41  static const int kAccumulatorChannels[kAccumulatorNumChannels];
42 
43  explicit AnalogInput(int channel);
44  virtual ~AnalogInput();
45 
46  int GetValue() const;
47  int GetAverageValue() const;
48 
49  double GetVoltage() const;
50  double GetAverageVoltage() const;
51 
52  int GetChannel() const;
53 
54  void SetAverageBits(int bits);
55  int GetAverageBits() const;
56  void SetOversampleBits(int bits);
57  int GetOversampleBits() const;
58 
59  int GetLSBWeight() const;
60  int GetOffset() const;
61 
62  bool IsAccumulatorChannel() const;
63  void InitAccumulator();
64  void SetAccumulatorInitialValue(int64_t value);
65  void ResetAccumulator();
66  void SetAccumulatorCenter(int center);
67  void SetAccumulatorDeadband(int deadband);
68  int64_t GetAccumulatorValue() const;
69  int64_t GetAccumulatorCount() const;
70  void GetAccumulatorOutput(int64_t& value, int64_t& count) const;
71 
72  static void SetSampleRate(double samplesPerSecond);
73  static double GetSampleRate();
74 
75  double PIDGet() override;
76 
77  void UpdateTable() override;
78  void StartLiveWindowMode() override;
79  void StopLiveWindowMode() override;
80  std::string GetSmartDashboardType() const override;
81  void InitTable(std::shared_ptr<ITable> subTable) override;
82  std::shared_ptr<ITable> GetTable() const override;
83 
84  private:
85  int m_channel;
86  // TODO: Adjust HAL to avoid use of raw pointers.
87  HAL_AnalogInputHandle m_port;
88  int64_t m_accumulatorOffset;
89 
90  std::shared_ptr<ITable> m_table;
91 };
92 
93 } // namespace frc
std::string GetSmartDashboardType() const override
Definition: AnalogInput.cpp:426
void SetOversampleBits(int bits)
Set the number of oversample bits.
Definition: AnalogInput.cpp:223
static double GetSampleRate()
Get the current sample rate for all channels.
Definition: AnalogInput.cpp:399
Live Window Sendable is a special type of object sendable to the live window.
Definition: LiveWindowSendable.h:17
int GetOffset() const
Get the factory scaling offset constant.
Definition: AnalogInput.cpp:162
double GetAverageVoltage() const
Get a scaled sample from the output of the oversample and average engine for this channel...
Definition: AnalogInput.cpp:132
Base class for all sensors.
Definition: SensorBase.h:22
int GetLSBWeight() const
Get the factory scaling least significant bit weight constant.
Definition: AnalogInput.cpp:147
void SetAccumulatorCenter(int center)
Set the center value of the accumulator.
Definition: AnalogInput.cpp:314
int GetOversampleBits() const
Get the number of oversample bits previously configured.
Definition: AnalogInput.cpp:239
double GetVoltage() const
Get a scaled sample straight from this channel.
Definition: AnalogInput.cpp:110
void SetAccumulatorInitialValue(int64_t value)
Set an initial value for the accumulator.
Definition: AnalogInput.cpp:279
PIDSource interface is a generic sensor source for the PID class.
Definition: PIDSource.h:19
int GetAverageValue() const
Get a sample from the output of the oversample and average engine for this channel.
Definition: AnalogInput.cpp:94
AnalogInput(int channel)
Construct an analog input.
Definition: AnalogInput.cpp:29
int GetAverageBits() const
Get the number of averaging bits previously configured.
Definition: AnalogInput.cpp:206
static void SetSampleRate(double samplesPerSecond)
Set the sample rate per channel for all analog channels.
Definition: AnalogInput.cpp:388
int64_t GetAccumulatorValue() const
Read the accumulated value.
Definition: AnalogInput.cpp:339
int64_t GetAccumulatorCount() const
Read the number of accumulated values.
Definition: AnalogInput.cpp:355
int GetChannel() const
Get the channel number.
Definition: AnalogInput.cpp:175
int GetValue() const
Get a sample straight from this channel.
Definition: AnalogInput.cpp:72
Use a rate gyro to return the robots heading relative to a starting position.
Definition: AnalogGyro.h:32
virtual ~AnalogInput()
Channel destructor.
Definition: AnalogInput.cpp:58
void UpdateTable() override
Update the table for this sendable object with the latest values.
Definition: AnalogInput.cpp:416
Definition: AnalogTrigger.h:20
void ResetAccumulator()
Resets the accumulator to the initial value.
Definition: AnalogInput.cpp:287
bool IsAccumulatorChannel() const
Is the channel attached to an accumulator.
Definition: AnalogInput.cpp:252
std::shared_ptr< ITable > GetTable() const override
Definition: AnalogInput.cpp:435
void SetAccumulatorDeadband(int deadband)
Set the accumulator's deadband.
Definition: AnalogInput.cpp:324
void InitAccumulator()
Initialize the accumulator.
Definition: AnalogInput.cpp:263
void StopLiveWindowMode() override
Stop having this sendable object automatically respond to value changes.
Definition: AnalogInput.cpp:424
void InitTable(std::shared_ptr< ITable > subTable) override
Initializes a table for this sendable object.
Definition: AnalogInput.cpp:430
void GetAccumulatorOutput(int64_t &value, int64_t &count) const
Read the accumulated value and the number of accumulated values atomically.
Definition: AnalogInput.cpp:372
void SetAverageBits(int bits)
Set the number of averaging bits.
Definition: AnalogInput.cpp:191
void StartLiveWindowMode() override
Start having this sendable object automatically respond to value changes reflect the value on the tab...
Definition: AnalogInput.cpp:422
Analog input class.
Definition: AnalogInput.h:32
double PIDGet() override
Get the Average value for the PID Source base object.
Definition: AnalogInput.cpp:411