ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
pulse_meter_sensor.h
Go to the documentation of this file.
1#pragma once
2
5#include "esphome/core/hal.h"
7
8#include <cinttypes>
9
10namespace esphome::pulse_meter {
11
13 public:
18
19 void set_pin(InternalGPIOPin *pin) { this->pin_ = pin; }
20 void set_filter_us(uint32_t filter) { this->filter_us_ = filter; }
21 void set_timeout_us(uint32_t timeout) { this->timeout_us_ = timeout; }
22 void set_total_sensor(sensor::Sensor *sensor) { this->total_sensor_ = sensor; }
24
25 void set_total_pulses(uint32_t pulses);
26
27 void setup() override;
28 void loop() override;
29 void dump_config() override;
30
31 protected:
32 static void edge_intr(PulseMeterSensor *sensor);
33 static void pulse_intr(PulseMeterSensor *sensor);
34
37 uint32_t timeout_us_ = 1000000UL * 60UL * 5UL;
40
41 // Variables used in the loop
44 bool peeked_edge_ = false;
47
48 // This struct and variable are used to pass data between the ISR and loop.
49 // The data from state_ is read and then count_ in state_ is reset in each loop.
50 // This must be done while guarded by an InterruptLock. Use this variable to send data
51 // from the ISR to the loop not the other way around (except for resetting count_).
57 volatile State state_{};
58
59 // Only use the following variables in the ISR or while guarded by an InterruptLock
61
63 bool last_pin_val_ = false;
64
70
72 struct PulseState {
74 bool latched_ = false;
75 };
77};
78
79} // namespace esphome::pulse_meter
BedjetMode mode
BedJet operating mode.
Copy of GPIOPin that is safe to use from ISRs (with no virtual functions)
Definition gpio.h:92
bool last_pin_val_
The last pin value seen.
static void edge_intr(PulseMeterSensor *sensor)
void set_total_sensor(sensor::Sensor *sensor)
static void pulse_intr(PulseMeterSensor *sensor)
void set_filter_mode(InternalFilterMode mode)
Base-class for all sensors.
Definition sensor.h:47
static void uint32_t