mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-23 01:21:42 +00:00
This removes the name and subsystem from individual objects, and instead puts this data into a new singleton class, SendableRegistry. Much of LiveWindow has been refactored into SendableRegistry. In C++, a new CRTP helper class, SendableHelper, has been added to provide move and destruction functionality. Shims for GetName, SetName, GetSubsystem, and SetSubsystem have been added to Command and Subsystem (both old and new), and also to SendableHelper to prevent code breakage. This deprecates SendableBase in preparation for future removal.
127 lines
4.9 KiB
C++
127 lines
4.9 KiB
C++
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) 2016-2019 FIRST. All Rights Reserved. */
|
|
/* Open Source Software - may be modified and shared by FRC teams. The code */
|
|
/* must be accompanied by the FIRST BSD license file in the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
|
|
#include "frc/AnalogInput.h"
|
|
#include "frc/ErrorBase.h"
|
|
#include "frc/interfaces/Potentiometer.h"
|
|
#include "frc/smartdashboard/Sendable.h"
|
|
#include "frc/smartdashboard/SendableHelper.h"
|
|
|
|
namespace frc {
|
|
|
|
class SendableBuilder;
|
|
|
|
/**
|
|
* Class for reading analog potentiometers. Analog potentiometers read in an
|
|
* analog voltage that corresponds to a position. The position is in whichever
|
|
* units you choose, by way of the scaling and offset constants passed to the
|
|
* constructor.
|
|
*/
|
|
class AnalogPotentiometer : public ErrorBase,
|
|
public Potentiometer,
|
|
public Sendable,
|
|
public SendableHelper<AnalogPotentiometer> {
|
|
public:
|
|
/**
|
|
* Construct an Analog Potentiometer object from a channel number.
|
|
*
|
|
* Use the fullRange and offset values so that the output produces meaningful
|
|
* values. I.E: you have a 270 degree potentiometer and you want the output to
|
|
* be degrees with the halfway point as 0 degrees. The fullRange value is
|
|
* 270.0 degrees and the offset is -135.0 since the halfway point after
|
|
* scaling is 135 degrees.
|
|
*
|
|
* This will calculate the result from the fullRange times the fraction of the
|
|
* supply voltage, plus the offset.
|
|
*
|
|
* @param channel The channel number on the roboRIO to represent. 0-3 are
|
|
* on-board 4-7 are on the MXP port.
|
|
* @param fullRange The angular value (in desired units) representing the full
|
|
* 0-5V range of the input.
|
|
* @param offset The angular value (in desired units) representing the
|
|
* angular output at 0V.
|
|
*/
|
|
explicit AnalogPotentiometer(int channel, double fullRange = 1.0,
|
|
double offset = 0.0);
|
|
|
|
/**
|
|
* Construct an Analog Potentiometer object from an existing Analog Input
|
|
* pointer.
|
|
*
|
|
* Use the fullRange and offset values so that the output produces meaningful
|
|
* values. I.E: you have a 270 degree potentiometer and you want the output to
|
|
* be degrees with the halfway point as 0 degrees. The fullRange value is
|
|
* 270.0 degrees and the offset is -135.0 since the halfway point after
|
|
* scaling is 135 degrees.
|
|
*
|
|
* This will calculate the result from the fullRange times the fraction of the
|
|
* supply voltage, plus the offset.
|
|
*
|
|
* @param channel The existing Analog Input pointer
|
|
* @param fullRange The angular value (in desired units) representing the full
|
|
* 0-5V range of the input.
|
|
* @param offset The angular value (in desired units) representing the
|
|
* angular output at 0V.
|
|
*/
|
|
explicit AnalogPotentiometer(AnalogInput* input, double fullRange = 1.0,
|
|
double offset = 0.0);
|
|
|
|
/**
|
|
* Construct an Analog Potentiometer object from an existing Analog Input
|
|
* pointer.
|
|
*
|
|
* Use the fullRange and offset values so that the output produces meaningful
|
|
* values. I.E: you have a 270 degree potentiometer and you want the output to
|
|
* be degrees with the halfway point as 0 degrees. The fullRange value is
|
|
* 270.0 degrees and the offset is -135.0 since the halfway point after
|
|
* scaling is 135 degrees.
|
|
*
|
|
* This will calculate the result from the fullRange times the fraction of the
|
|
* supply voltage, plus the offset.
|
|
*
|
|
* @param channel The existing Analog Input pointer
|
|
* @param fullRange The angular value (in desired units) representing the full
|
|
* 0-5V range of the input.
|
|
* @param offset The angular value (in desired units) representing the
|
|
* angular output at 0V.
|
|
*/
|
|
explicit AnalogPotentiometer(std::shared_ptr<AnalogInput> input,
|
|
double fullRange = 1.0, double offset = 0.0);
|
|
|
|
~AnalogPotentiometer() override = default;
|
|
|
|
AnalogPotentiometer(AnalogPotentiometer&&) = default;
|
|
AnalogPotentiometer& operator=(AnalogPotentiometer&&) = default;
|
|
|
|
/**
|
|
* Get the current reading of the potentiomer.
|
|
*
|
|
* @return The current position of the potentiometer (in the units used for
|
|
* fullRange and offset).
|
|
*/
|
|
double Get() const override;
|
|
|
|
/**
|
|
* Implement the PIDSource interface.
|
|
*
|
|
* @return The current reading.
|
|
*/
|
|
double PIDGet() override;
|
|
|
|
void InitSendable(SendableBuilder& builder) override;
|
|
|
|
private:
|
|
std::shared_ptr<AnalogInput> m_analog_input;
|
|
double m_fullRange, m_offset;
|
|
};
|
|
|
|
} // namespace frc
|