ESPHome 2026.3.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 {
11namespace pulse_meter {
12
14 public:
19
20 void set_pin(InternalGPIOPin *pin) { this->pin_ = pin; }
21 void set_filter_us(uint32_t filter) { this->filter_us_ = filter; }
22 void set_timeout_us(uint32_t timeout) { this->timeout_us_ = timeout; }
23 void set_total_sensor(sensor::Sensor *sensor) { this->total_sensor_ = sensor; }
25
26 void set_total_pulses(uint32_t pulses);
27
28 void setup() override;
29 void loop() override;
30 void dump_config() override;
31
32 protected:
33 static void edge_intr(PulseMeterSensor *sensor);
34 static void pulse_intr(PulseMeterSensor *sensor);
35
37 uint32_t filter_us_ = 0;
38 uint32_t timeout_us_ = 1000000UL * 60UL * 5UL;
41
42 // Variables used in the loop
45 bool peeked_edge_ = false;
46 uint32_t total_pulses_ = 0;
48
49 // This struct and variable are used to pass data between the ISR and loop.
50 // The data from state_ is read and then count_ in state_ is reset in each loop.
51 // This must be done while guarded by an InterruptLock. Use this variable to send data
52 // from the ISR to the loop not the other way around (except for resetting count_).
53 struct State {
56 uint32_t count_ = 0;
57 };
58 volatile State state_{};
59
60 // Only use the following variables in the ISR or while guarded by an InterruptLock
62
64 bool last_pin_val_ = false;
65
67 struct EdgeState {
68 uint32_t last_sent_edge_us_ = 0;
69 };
71
73 struct PulseState {
74 uint32_t last_intr_ = 0;
75 bool latched_ = false;
76 };
78};
79
80} // namespace pulse_meter
81} // namespace esphome
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
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7