// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this project. #include "frc/Debouncer.h" using namespace frc; Debouncer::Debouncer(units::second_t debounceTime, DebounceType type) : m_debounceTime(debounceTime), m_debounceType(type) { switch (type) { case DebounceType::kBoth: // fall-through case DebounceType::kRising: m_baseline = false; break; case DebounceType::kFalling: m_baseline = true; break; } m_timer.Start(); } bool Debouncer::Calculate(bool input) { if (input == m_baseline) { m_timer.Reset(); } if (m_timer.HasElapsed(m_debounceTime)) { if (m_debounceType == DebounceType::kBoth) { m_baseline = input; m_timer.Reset(); } return input; } else { return m_baseline; } }