[wpilib, examples] Cleanup PotentiometerPID, Ultrasonic, UltrasonicPID examples (#4893)

Fix C++ Ultrasonic to return correct units.
This commit is contained in:
Starlight220
2023-01-09 02:33:07 +02:00
committed by GitHub
parent babb0c1fcf
commit 2cd9be413f
24 changed files with 1052 additions and 301 deletions

View File

@@ -85,10 +85,7 @@ int Ultrasonic::GetEchoChannel() const {
}
void Ultrasonic::Ping() {
if (m_automaticEnabled) {
throw FRC_MakeError(err::IncompatibleMode,
"cannot call Ping() in automatic mode");
}
SetAutomaticMode(false); // turn off automatic round-robin if pinging
// Reset the counter to zero (invalid data now)
m_counter.Reset();
@@ -138,7 +135,7 @@ void Ultrasonic::SetAutomaticMode(bool enabling) {
units::meter_t Ultrasonic::GetRange() const {
if (IsRangeValid()) {
if (m_simRange) {
return units::meter_t{m_simRange.Get()};
return units::inch_t{m_simRange.Get()};
}
return m_counter.GetPeriod() * kSpeedOfSound / 2.0;
} else {

View File

@@ -9,8 +9,11 @@
using namespace frc::sim;
UltrasonicSim::UltrasonicSim(const frc::Ultrasonic& ultrasonic) {
frc::sim::SimDeviceSim deviceSim{"Ultrasonic", ultrasonic.GetEchoChannel()};
UltrasonicSim::UltrasonicSim(const frc::Ultrasonic& ultrasonic)
: UltrasonicSim(0, ultrasonic.GetEchoChannel()) {}
UltrasonicSim::UltrasonicSim(int ping, int echo) {
frc::sim::SimDeviceSim deviceSim{"Ultrasonic", echo};
m_simRangeValid = deviceSim.GetBoolean("Range Valid");
m_simRange = deviceSim.GetDouble("Range (in)");
}
@@ -19,6 +22,6 @@ void UltrasonicSim::SetRangeValid(bool isValid) {
m_simRangeValid.Set(isValid);
}
void UltrasonicSim::SetRange(units::meter_t range) {
void UltrasonicSim::SetRange(units::inch_t range) {
m_simRange.Set(range.value());
}

View File

@@ -14,16 +14,24 @@ class Ultrasonic;
namespace sim {
/**
* Class to control a simulated ADXRS450 gyroscope.
* Class to control a simulated {@link Ultrasonic}.
*/
class UltrasonicSim {
public:
/**
* Constructs from a ADXRS450_Gyro object.
* Constructor.
*
* @param gyro ADXRS450_Gyro to simulate
* @param ultrasonic The real ultrasonic to simulate
*/
explicit UltrasonicSim(const Ultrasonic& gyro);
explicit UltrasonicSim(const Ultrasonic& ultrasonic);
/**
* Constructor.
*
* @param ping unused.
* @param echo the ultrasonic's echo channel.
*/
UltrasonicSim(int ping, int echo);
/**
* Sets if the range measurement is valid.
@@ -37,7 +45,7 @@ class UltrasonicSim {
*
* @param range The range
*/
void SetRange(units::meter_t range);
void SetRange(units::inch_t range);
private:
hal::SimBoolean m_simRangeValid;