Send 0.95 from TOF controller if there is no cone.
This lets us detect cone presence separately from unplugged sensor.
Change-Id: I0f70c1229bd88b5c50ed2fdf043361d072c41402
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/y2023/wpilib_interface.cc b/y2023/wpilib_interface.cc
index 4dedd1d..8b68fb6 100644
--- a/y2023/wpilib_interface.cc
+++ b/y2023/wpilib_interface.cc
@@ -138,6 +138,7 @@
void Start() override {
AddToDMA(&imu_heading_reader_);
AddToDMA(&imu_yaw_rate_reader_);
+ AddToDMA(&cone_position_sensor_);
}
// Auto mode switches.
@@ -196,10 +197,10 @@
position_builder.add_arm(arm_offset);
position_builder.add_wrist(wrist_offset);
- position_builder.add_end_effector_cone_beam_break(
- end_effector_cone_beam_break_->Get());
position_builder.add_end_effector_cube_beam_break(
end_effector_cube_beam_break_->Get());
+ position_builder.add_cone_position(cone_position_sensor_.last_width() /
+ cone_position_sensor_.last_period());
builder.CheckOk(builder.Send(position_builder.Finish()));
}
@@ -341,15 +342,16 @@
wrist_encoder_.set_absolute_pwm(::std::move(absolute_pwm));
}
- void set_end_effector_cone_beam_break(
- ::std::unique_ptr<frc::DigitalInput> sensor) {
- end_effector_cone_beam_break_ = ::std::move(sensor);
- }
void set_end_effector_cube_beam_break(
::std::unique_ptr<frc::DigitalInput> sensor) {
end_effector_cube_beam_break_ = ::std::move(sensor);
}
+ void set_cone_position_sensor(::std::unique_ptr<frc::DigitalInput> sensor) {
+ cone_position_input_ = ::std::move(sensor);
+ cone_position_sensor_.set_input(cone_position_input_.get());
+ }
+
private:
std::shared_ptr<const Values> values_;
@@ -362,13 +364,16 @@
std::array<std::unique_ptr<frc::DigitalInput>, 2> autonomous_modes_;
std::unique_ptr<frc::DigitalInput> imu_heading_input_, imu_yaw_rate_input_,
- end_effector_cone_beam_break_, end_effector_cube_beam_break_;
+ end_effector_cube_beam_break_;
frc971::wpilib::DMAPulseWidthReader imu_heading_reader_, imu_yaw_rate_reader_;
frc971::wpilib::AbsoluteEncoderAndPotentiometer proximal_encoder_,
distal_encoder_, roll_joint_encoder_;
frc971::wpilib::AbsoluteEncoder wrist_encoder_;
+
+ frc971::wpilib::DMAPulseWidthReader cone_position_sensor_;
+ std::unique_ptr<frc::DigitalInput> cone_position_input_;
};
class SuperstructureWriter
@@ -831,11 +836,9 @@
sensor_reader.set_wrist_encoder(make_encoder(4));
sensor_reader.set_wrist_absolute_pwm(make_unique<frc::DigitalInput>(4));
- // TODO(Max): Make the DigitalInput values the accurate robot values.
- sensor_reader.set_end_effector_cone_beam_break(
- make_unique<frc::DigitalInput>(6));
sensor_reader.set_end_effector_cube_beam_break(
make_unique<frc::DigitalInput>(7));
+ sensor_reader.set_cone_position_sensor(make_unique<frc::DigitalInput>(8));
AddLoop(&sensor_reader_event_loop);