Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[wpimath] Add Debouncer type and time setters #7839

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
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);
}
Loading