SensESP 2.7.2
Universal Signal K sensor toolkit ESP32
Loading...
Searching...
No Matches
digital_input.h
Go to the documentation of this file.
1#ifndef _digital_input_H_
2#define _digital_input_H_
3
4#include "sensor.h"
5
6#include <elapsedMillis.h>
7
8namespace sensesp {
9
19 public:
20 DigitalInput(uint8_t pin, int pin_mode) : pin_{pin} {
22 };
23
24 protected:
26};
27
48class DigitalInputState : public DigitalInput, public SensorT<bool> {
49 public:
50 DigitalInputState(uint8_t pin, int pin_mode, int read_delay = 1000,
52 : DigitalInput{pin, pin_mode},
54 read_delay_{read_delay},
55 triggered_{false} {
57 }
58
59 virtual void start() override final {
60 ReactESP::app->onRepeat(read_delay_, [this]() { emit(digitalRead(pin_)); });
61 }
62
63 private:
64 int read_delay_;
65 bool triggered_;
66 virtual void get_configuration(JsonObject& doc) override;
67 virtual bool set_configuration(const JsonObject& config) override;
68 virtual String get_config_schema() override;
69};
70
89class DigitalInputCounter : public DigitalInput, public SensorT<int> {
90 public:
92 unsigned int read_delay, String config_path = "")
94 config_path, [this]() { this->counter_++; }) {}
95
97 ReactESP::app->onInterrupt(pin_, interrupt_type_, interrupt_handler_);
98
99 ReactESP::app->onRepeat(read_delay_, [this]() {
100 noInterrupts();
102 counter_ = 0;
103 interrupts();
104 notify();
105 });
106 }
107
108 protected:
110 unsigned int read_delay, String config_path,
111 std::function<void()> interrupt_handler)
112 : DigitalInput{pin, pin_mode},
114 interrupt_type_{interrupt_type},
115 interrupt_handler_{interrupt_handler},
116 read_delay_{read_delay} {
118 }
119
120 unsigned int read_delay_;
121 volatile unsigned int counter_ = 0;
122
123 private:
124 int interrupt_type_;
125 std::function<void()> interrupt_handler_;
126 virtual void get_configuration(JsonObject& doc) override;
127 virtual bool set_configuration(const JsonObject& config) override;
128 virtual String get_config_schema() override;
129};
130
153 public:
155 unsigned int read_delay,
156 unsigned int ignore_interval_ms,
157 String config_path = "")
158 : DigitalInputCounter(pin, pin_mode, interrupt_type, read_delay,
159 config_path, [this]() { this->handleInterrupt(); }),
160 ignore_interval_ms_{ignore_interval_ms} {}
161
162 private:
163 void handleInterrupt();
164
165 unsigned int ignore_interval_ms_;
166 elapsedMillis since_last_event_;
167 virtual void get_configuration(JsonObject& doc) override;
168 virtual bool set_configuration(const JsonObject& config) override;
169 virtual String get_config_schema() override;
170};
171
192class DigitalInputChange : public DigitalInput, public SensorT<bool> {
193 public:
195 String config_path = "")
196 : DigitalInput{pin, pin_mode},
198 interrupt_type_{interrupt_type},
199 triggered_{true} {
202 last_output_ = !output; // ensure that we always send the first output
203 }
204 virtual void start() override final;
205
206 private:
207 int interrupt_type_;
208 bool triggered_;
209 bool last_output_;
210 virtual void get_configuration(JsonObject& doc) override {}
211 virtual bool set_configuration(const JsonObject& config) override {
212 return false;
213 }
214};
215
216} // namespace sensesp
217
218#endif
virtual void load_configuration()
DigitalInputChange provides output whenever a digital pin changes its state.
virtual void start() override final
DigitalInputChange(uint8_t pin, int pin_mode, int interrupt_type, String config_path="")
DigitalInputCounter counts interrupts and reports the count every read_delay ms.
volatile unsigned int counter_
DigitalInputCounter(uint8_t pin, int pin_mode, int interrupt_type, unsigned int read_delay, String config_path, std::function< void()> interrupt_handler)
DigitalInputCounter(uint8_t pin, int pin_mode, int interrupt_type, unsigned int read_delay, String config_path="")
void start() override final
DigitalInputDebounceCounter counts interrupts and reports the count every read_delay ms,...
DigitalInputDebounceCounter(uint8_t pin, int pin_mode, int interrupt_type, unsigned int read_delay, unsigned int ignore_interval_ms, String config_path="")
DigitalInput is the base class for reading a digital GPIO pin.
DigitalInput(uint8_t pin, int pin_mode)
DigitalInputState polls the state of an input pin every read_delay ms.
DigitalInputState(uint8_t pin, int pin_mode, int read_delay=1000, String config_path="")
virtual void start() override final
Construct a new transform based on a single function.
Sensor template class for any sensor producing actual values.
Definition sensor.h:45
void emit(T new_value)