Updated with reed relais and debouncing button

This commit is contained in:
Ard Kuijpers
2020-04-08 22:44:37 +02:00
parent d02b9a63f4
commit ae9f175dad
9 changed files with 441 additions and 269 deletions

View File

@@ -0,0 +1,52 @@
/*
* ButtonNode.hpp
* Homie Node for a button with optional callback function
*
* Version: 1.0
* Author: Lübbe Onken (http://github.com/luebbe)
*/
#pragma once
#include <Homie.hpp>
#define DEFAULTPIN -1
class ButtonNode : public HomieNode
{
public:
typedef std::function<void(void)> TButtonPressCallback;
typedef std::function<void(bool)> TButtonChangeCallback;
private:
const char *cCaption = "• Button:";
const char *cIndent = "";
TButtonPressCallback _buttonPressCallback;
TButtonChangeCallback _buttonChangeCallback;
int _buttonPin;
byte _lastReading = HIGH;
byte _buttonState = HIGH;
bool _buttonPressHandled = 0;
bool _buttonChangeHandled = 0;
unsigned long _buttonDownTime = 0;
unsigned long _minButtonDownTime = 90;
unsigned long _maxButtonDownTime = 2000;
unsigned long _lastDebounceTime = 0; // the last time the button pin was toggled
void handleButtonPress(unsigned long dt);
void handleButtonChange(bool down);
void printCaption();
protected:
virtual void loop() override;
virtual void setup() override;
public:
explicit ButtonNode(const char *name, const int buttonPin = DEFAULTPIN, TButtonPressCallback buttonPressedCallback = NULL, TButtonChangeCallback buttonChangedCallback = NULL);
void onPress(TButtonPressCallback buttonCallback);
void onChange(TButtonChangeCallback buttonCallback);
void setMinButtonDownTime(unsigned short downTime);
void setMaxButtonDownTime(unsigned short downTime);
};