mirror of
https://github.com/odriverobotics/ODrive.git
synced 2026-02-06 23:41:53 +08:00
33 lines
839 B
C++
33 lines
839 B
C++
#include <odrive_main.h>
|
|
|
|
|
|
void Endstop::update() {
|
|
debounceTimer_.update();
|
|
last_state_ = endstop_state_;
|
|
if (config_.enabled) {
|
|
bool last_pin_state = pin_state_;
|
|
|
|
pin_state_ = get_gpio(config_.gpio_num).read();
|
|
|
|
// If the pin state has changed, reset the timer
|
|
if (pin_state_ != last_pin_state)
|
|
debounceTimer_.reset();
|
|
|
|
if (debounceTimer_.expired())
|
|
endstop_state_ = config_.is_active_high ? pin_state_ : !pin_state_; // endstop_state is the logical state
|
|
} else {
|
|
endstop_state_ = false;
|
|
}
|
|
}
|
|
|
|
bool Endstop::apply_config() {
|
|
debounceTimer_.reset();
|
|
if (config_.enabled) {
|
|
debounceTimer_.start();
|
|
} else {
|
|
debounceTimer_.stop();
|
|
}
|
|
debounceTimer_.setIncrement(config_.debounce_ms * 0.001f);
|
|
return true;
|
|
}
|