#pragma once
#include <wpi/SymbolExports.h>
#include <wpi/timestamp.h>
#include "units/time.h"
namespace frc {
class WPILIB_DLLEXPORT Debouncer {
public:
enum DebounceType {
kRising,
kFalling,
kBoth
};
explicit Debouncer(units::second_t debounceTime,
DebounceType type = DebounceType::kRising);
bool Calculate(bool input);
constexpr void SetDebounceTime(units::second_t time) {
m_debounceTime = time;
}
constexpr units::second_t GetDebounceTime() const { return m_debounceTime; }
constexpr void SetDebounceType(DebounceType type) {
m_debounceType = type;
m_baseline = m_debounceType == DebounceType::kFalling;
}
constexpr DebounceType GetDebounceType() const { return m_debounceType; }
private:
units::second_t m_debounceTime;
bool m_baseline;
DebounceType m_debounceType;
units::second_t m_prevTime;
void ResetTimer();
bool HasElapsed() const;
};
}