mirror of
https://github.com/Threnklyn/esphome-dev.git
synced 2026-06-01 10:38:27 +02:00
Make pulse_meter PULSE filter report the pulse as soon as it can (#6014)
This commit is contained in:
@@ -43,6 +43,7 @@ class PulseMeterSensor : public sensor::Sensor, public Component {
|
||||
// Variables used in the loop
|
||||
enum class MeterState { INITIAL, RUNNING, TIMED_OUT };
|
||||
MeterState meter_state_ = MeterState::INITIAL;
|
||||
bool peeked_edge_ = false;
|
||||
uint32_t total_pulses_ = 0;
|
||||
uint32_t last_processed_edge_us_ = 0;
|
||||
|
||||
@@ -53,6 +54,7 @@ class PulseMeterSensor : public sensor::Sensor, public Component {
|
||||
// (except for resetting the values)
|
||||
struct State {
|
||||
uint32_t last_detected_edge_us_ = 0;
|
||||
uint32_t last_rising_edge_us_ = 0;
|
||||
uint32_t count_ = 0;
|
||||
};
|
||||
State state_[2];
|
||||
@@ -61,10 +63,20 @@ class PulseMeterSensor : public sensor::Sensor, public Component {
|
||||
|
||||
// Only use these variables in the ISR
|
||||
ISRInternalGPIOPin isr_pin_;
|
||||
uint32_t last_edge_candidate_us_ = 0;
|
||||
uint32_t last_intr_ = 0;
|
||||
bool in_pulse_ = false;
|
||||
bool last_pin_val_ = false;
|
||||
|
||||
/// Filter state for edge mode
|
||||
struct EdgeState {
|
||||
uint32_t last_sent_edge_us_ = 0;
|
||||
};
|
||||
EdgeState edge_state_{};
|
||||
|
||||
/// Filter state for pulse mode
|
||||
struct PulseState {
|
||||
uint32_t last_intr_ = 0;
|
||||
bool latched_ = false;
|
||||
bool last_pin_val_ = false;
|
||||
};
|
||||
PulseState pulse_state_{};
|
||||
};
|
||||
|
||||
} // namespace pulse_meter
|
||||
|
||||
Reference in New Issue
Block a user