Skip to content

Commit

Permalink
Add setters for Debouncer type & time
Browse files Browse the repository at this point in the history
Signed-off-by: swurl <[email protected]>
  • Loading branch information
crueter committed Mar 1, 2025
1 parent a7ae22d commit 6ab3728
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 2 deletions.
42 changes: 40 additions & 2 deletions wpimath/src/main/java/edu/wpi/first/math/filter/Debouncer.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ public enum DebounceType {
kBoth
}

private final double m_debounceTimeSeconds;
private final DebounceType m_debounceType;
private double m_debounceTimeSeconds;
private DebounceType m_debounceType;
private boolean m_baseline;

private double m_prevTimeSeconds;
Expand Down Expand Up @@ -86,4 +86,42 @@ public boolean calculate(boolean input) {
return m_baseline;
}
}

/**
* Sets the time to debounce.
*
* @param time The number of seconds the value must change from baseline for the filtered value to
* change.
*/
public void setDebounceTime(double time) {
m_debounceTimeSeconds = time;
}

/**
* Gets the time to debounce.
*
* @return The number of seconds the value must change from baseline for the filtered value to
* change.
*/
public double getDebounceTime() {
return m_debounceTimeSeconds;
}

/**
* Sets the debounce type.
*
* @param type Which type of state change the debouncing will be performed on.
*/
public void setDebounceType(DebounceType type) {
m_debounceType = type;
}

/**
* Gets the debounce type.
*
* @return Which type of state change the debouncing will be performed on.
*/
public DebounceType getDebounceType() {
return m_debounceType;
}
}
34 changes: 34 additions & 0 deletions wpimath/src/main/native/include/frc/filter/Debouncer.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,40 @@ class WPILIB_DLLEXPORT Debouncer {
*/
bool Calculate(bool input);

/**
* Sets the time to debounce.
*
* @param time The number of seconds the value must change from baseline
* for the filtered value to change.
*/
constexpr void SetDebounceTime(units::second_t time) {
this->m_debounceTime = time;
}

/**
* Gets the time to debounce.
*
* @return The number of seconds the value must change from baseline
* for the filtered value to change.
*/
constexpr units::second_t GetDebounceTime() { return this->m_debounceTime; }

/**
* Set the debounce type.
*
* @param type Which type of state change the debouncing will be performed on.
*/
constexpr void SetDebounceType(DebounceType type) {
this->m_debounceType = type;
}

/**
* Get the debounce type.
*
* @return Which type of state change the debouncing will be performed on.
*/
constexpr DebounceType GetDebounceType() { return this->m_debounceType; }

private:
units::second_t m_debounceTime;
bool m_baseline;
Expand Down
18 changes: 18 additions & 0 deletions wpimath/src/test/java/edu/wpi/first/math/filter/DebouncerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@

package edu.wpi.first.math.filter;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;

import edu.wpi.first.util.WPIUtilJNI;
Expand Down Expand Up @@ -67,4 +69,20 @@ void debounceBothTest() {

assertFalse(debouncer.calculate(false));
}

@Test
void debounceParamsTest() {
var debouncer = new Debouncer(0.02, Debouncer.DebounceType.kBoth);

assertEquals(debouncer.getDebounceTime(), 0.02);
assertSame(debouncer.getDebounceType(), Debouncer.DebounceType.kBoth);

debouncer.setDebounceTime(0.1);

assertEquals(debouncer.getDebounceTime(), 0.1);

debouncer.setDebounceType(Debouncer.DebounceType.kFalling);

assertSame(debouncer.getDebounceType(), Debouncer.DebounceType.kFalling);
}
}
17 changes: 17 additions & 0 deletions wpimath/src/test/native/cpp/filter/DebouncerTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,20 @@ TEST_F(DebouncerTest, DebounceBoth) {

EXPECT_FALSE(debouncer.Calculate(false));
}

TEST_F(DebouncerTest, DebounceParams) {
frc::Debouncer debouncer{20_ms, frc::Debouncer::DebounceType::kBoth};

EXPECT_TRUE(debouncer.GetDebounceTime() == 20_ms);
EXPECT_TRUE(debouncer.GetDebounceType() ==
frc::Debouncer::DebounceType::kBoth);

debouncer.SetDebounceTime(100_ms);

EXPECT_TRUE(debouncer.GetDebounceTime() == 100_ms);

debouncer.SetDebounceType(frc::Debouncer::DebounceType::kFalling);

EXPECT_TRUE(debouncer.GetDebounceType() ==
frc::Debouncer::DebounceType::kFalling);
}

0 comments on commit 6ab3728

Please sign in to comment.