Add DutyCycleEncoder channel constructor (#2158)

Avoids extra boilerplate at user level.
This commit is contained in:
Thad House
2019-12-06 20:58:04 -08:00
committed by Peter Johnson
parent d8f11eb149
commit 67d2fed685
5 changed files with 27 additions and 10 deletions

View File

@@ -8,6 +8,7 @@
#include "frc/DutyCycleEncoder.h"
#include "frc/Counter.h"
#include "frc/DigitalInput.h"
#include "frc/DigitalSource.h"
#include "frc/DriverStation.h"
#include "frc/DutyCycle.h"
@@ -15,6 +16,12 @@
using namespace frc;
DutyCycleEncoder::DutyCycleEncoder(int channel)
: m_dutyCycle{std::make_shared<DutyCycle>(
std::make_shared<DigitalInput>(channel))},
m_analogTrigger{m_dutyCycle.get()},
m_counter{} {}
DutyCycleEncoder::DutyCycleEncoder(DutyCycle& dutyCycle)
: m_dutyCycle{&dutyCycle, NullDeleter<DutyCycle>{}},
m_analogTrigger{m_dutyCycle.get()},

View File

@@ -32,6 +32,13 @@ class DutyCycleEncoder : public ErrorBase,
public Sendable,
public SendableHelper<DutyCycleEncoder> {
public:
/**
* Construct a new DutyCycleEncoder on a specific channel.
*
* @param channel the channel to attach to
*/
explicit DutyCycleEncoder(int channel);
/**
* Construct a new DutyCycleEncoder attached to an existing DutyCycle object.
*

View File

@@ -5,17 +5,13 @@
/* the project. */
/*----------------------------------------------------------------------------*/
#include <frc/DigitalInput.h>
#include <frc/DutyCycle.h>
#include <frc/DutyCycleEncoder.h>
#include <frc/TimedRobot.h>
#include <frc/smartdashboard/SmartDashboard.h>
class Robot : public frc::TimedRobot {
frc::DigitalInput m_input{0}; // Input channel
// Duty cycle encoder
frc::DutyCycleEncoder m_dutyCycleEncoder{m_input};
// Duty cycle encoder on channel 0
frc::DutyCycleEncoder m_dutyCycleEncoder{0};
public:
void RobotInit() override {

View File

@@ -33,6 +33,16 @@ public class DutyCycleEncoder implements Sendable, AutoCloseable {
protected SimDouble m_simPosition;
protected SimBoolean m_simIsConnected;
/**
* Construct a new DutyCycleEncoder on a specific channel.
*
* @param channel the channel to attach to
*/
public DutyCycleEncoder(int channel) {
m_dutyCycle = new DutyCycle(new DigitalInput(channel));
init();
}
/**
* Construct a new DutyCycleEncoder attached to an existing DutyCycle object.
*

View File

@@ -7,20 +7,17 @@
package edu.wpi.first.wpilibj.examples.dutycycleencoder;
import edu.wpi.first.wpilibj.DigitalInput;
import edu.wpi.first.wpilibj.DutyCycleEncoder;
import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
@SuppressWarnings({"PMD.SingularField"})
public class Robot extends TimedRobot {
private DigitalInput m_input;
private DutyCycleEncoder m_dutyCycleEncoder;
@Override
public void robotInit() {
m_input = new DigitalInput(0);
m_dutyCycleEncoder = new DutyCycleEncoder(m_input);
m_dutyCycleEncoder = new DutyCycleEncoder(0);
// Set to 0.5 units per rotation
m_dutyCycleEncoder.setDistancePerRotation(0.5);