8 #include "AnalogChannel.h"
9 #include "AnalogModule.h"
10 #include "NetworkCommunication/UsageReporting.h"
12 #include "WPIErrors.h"
13 #include "LiveWindow/LiveWindow.h"
15 const uint32_t Gyro::kOversampleBits;
16 const uint32_t Gyro::kAverageBits;
17 constexpr
float Gyro::kSamplesPerSecond;
18 constexpr
float Gyro::kCalibrationSampleTime;
19 constexpr
float Gyro::kDefaultVoltsPerDegreePerSecond;
34 wpi_setWPIErrorWithContext(ParameterOutOfRange,
35 "moduleNumber and/or channel (must be accumulator channel)");
36 if (m_channelAllocated)
44 m_voltsPerDegreePerSecond = kDefaultVoltsPerDegreePerSecond;
47 float sampleRate = kSamplesPerSecond *
48 (1 << (kAverageBits + kOversampleBits));
53 Wait(kCalibrationSampleTime);
59 m_center = (uint32_t)((
float)value / (float)count + .5);
61 m_offset = ((float)value / (
float)count) - (
float)m_center;
67 SetPIDSourceParameter(kAngle);
82 m_channelAllocated =
true;
96 m_channelAllocated =
true;
109 m_channelAllocated =
false;
112 wpi_setWPIError(NullParameter);
123 m_channelAllocated =
false;
142 if (m_channelAllocated)
163 INT64 value = rawValue - (INT64)((
float)count * m_offset);
168 return (
float)scaledValue;
195 m_voltsPerDegreePerSecond = voltsPerDegreePerSecond;
198 void Gyro::SetPIDSourceParameter(PIDSourceParameter pidSource)
200 if(pidSource == 0 || pidSource > 2)
201 wpi_setWPIErrorWithContext(ParameterOutOfRange,
"Gyro pidSource");
202 m_pidSource = pidSource;
223 if (m_table != NULL) {
int32_t GetAverageValue()
void GetAccumulatorOutput(INT64 *value, uint32_t *count)
virtual void PutNumber(std::string key, double value)=0
void SetAccumulatorDeadband(int32_t deadband)
uint8_t GetModuleNumber()
uint32_t GetOversampleBits()
void SetSampleRate(float samplesPerSecond)
void AddSensor(const char *subsystem, const char *name, LiveWindowSendable *component)
AnalogModule * GetModule()
bool IsAccumulatorChannel()
void InitTable(ITable *subTable)
static LiveWindow * GetInstance()
uint32_t GetAverageBits()
void StartLiveWindowMode()
void StopLiveWindowMode()
void SetAccumulatorCenter(int32_t center)
Gyro(uint8_t moduleNumber, uint32_t channel)
void SetAverageBits(uint32_t bits)
void SetSensitivity(float voltsPerDegreePerSecond)
std::string GetSmartDashboardType()
void SetOversampleBits(uint32_t bits)