Rebondisseur

Un filtre anti-rebond est un filtre utilisé pour éliminer les cycles de marche/arrêt rapides indésirables (appelés « rebonds », à l’origine des vibrations physiques d’un interrupteur lorsqu’il est lancé). Ces cycles sont généralement dus à une erreur du capteur comme le bruit ou les réflexions et non au phénomène physique réel que le capteur essaie d’enregistrer.

Debouncing is implemented in WPILib by the Debouncer class (Java, C++, Python), which filters a boolean stream so that the output only changes if the input sustains a change for some nominal time period.

Modes

L’objet Debouncer WPILib peut être configuré dans trois modes différents :

  • Rising ou en montant (état par défaut): active l’anti-rebonds pendant les fronts montants (transitions de l’état logique false à l’état logique true) uniquement.

  • Falling ou en descendant: active l’anti-rebonds pendant les fronts descendants (transitions de l’état logique true à l’état logique false) uniquement.

  • Both ou les deux: active l’anti-rebonds pendant toutes les transitions.

Utilisation

// Initializes a DigitalInput on DIO 0
DigitalInput input = new DigitalInput(0);

// Creates a Debouncer in "both" mode.
Debouncer m_debouncer = new Debouncer(0.1, Debouncer.DebounceType.kBoth);

// So if currently false the signal must go true for at least .1 seconds before being read as a True signal.
if (m_debouncer.calculate(input.get())) {
    // Do something now that the DI is True.
}
// Initializes a DigitalInput on DIO 0
frc::DigitalInput input{0};

// Creates a Debouncer in "both" mode.
frc::Debouncer m_debouncer{100_ms, frc::Debouncer::DebounceType::kBoth};

// So if currently false the signal must go true for at least .1 seconds before being read as a True signal.
if (m_debouncer.calculate(input.Get())) {
    // Do something now that the DI is True.
}
from wpilib import DigitalInput
from wpimath.filter import Debouncer

# Initializes a DigitalInput on DIO 0
self.input = DigitalInput(0)

# Creates a Debouncer in "both" mode with a debounce time of 0.1 seconds
self.debouncer = Debouncer(0.1, Debouncer.DebounceType.kBoth)

# If currently false, the signal must go true for at least 0.1 seconds before being read as a True signal.
if self.debouncer.calculate(self.input.get()):
    # Do something now that the DI is True.
    pass