DCC-EX Simple Throttle
Simple throttle for a DCC-EX CommandStation
Loading...
Searching...
No Matches
/home/runner/work/DCCEXSimpleThrottle/DCCEXSimpleThrottle/avdweb_Switch.h
Go to the documentation of this file.
1
39#ifndef AVDWEB_SWITCH_H
40#define AVDWEB_SWITCH_H
41
42#include <Arduino.h>
43
44typedef void (*switchCallback_t)(void*);
45
46class Switch {
47public:
48 Switch(byte _pin, byte PinMode = INPUT_PULLUP, bool polarity = LOW,
49 unsigned long debouncePeriod = 50, unsigned long longPressPeriod = 300,
50 unsigned long doubleClickPeriod = 250,
51 unsigned long deglitchPeriod = 10);
52 bool poll(); // Returns 1 if switched
53 bool switched(); // will be refreshed by poll()
54 bool on();
55 bool pushed(); // will be refreshed by poll()
56 bool released(); // will be refreshed by poll()
57 bool longPress(); // will be refreshed by poll()
58 bool doubleClick(); // will be refreshed by poll()
59 bool singleClick(); // will be refreshed by poll()
60
61 // Set methods for event callbacks
62 void setPushedCallback(switchCallback_t cb, void* param = nullptr);
63 void setReleasedCallback(switchCallback_t cb, void* param = nullptr);
64 void setLongPressCallback(switchCallback_t cb, void* param = nullptr);
65 void setDoubleClickCallback(switchCallback_t cb, void* param = nullptr);
66 void setSingleClickCallback(switchCallback_t cb, void* param = nullptr);
67 void setBeepAllCallback(switchCallback_t cb, void* param = nullptr);
68
71
72protected:
73 bool process(); // not inline, used in child class
74 void inline deglitch();
75 void inline debounce();
76 void inline calcLongPress();
77 void inline calcDoubleClick();
78 void inline calcSingleClick();
79 void triggerCallbacks();
80
82 const byte pin;
83 const bool polarity;
86
87 // Event callbacks
93 static switchCallback_t
94 _beepAllCallback; // static function pointer, can be used by all objects
95 // static switchCallback_t _beepAllCallback = nullptr; // gives error with
96 // SAMD21 static void(*_beepAllCallback)(void*) = nullptr; // static function
97 // pointer without typedef
98
99 void* _pushedCallbackParam = nullptr;
100 void* _releasedCallbackParam = nullptr;
101 void* _longPressCallbackParam = nullptr;
104 static void* _beepAllCallbackParam; // can be used by all objects
105 // static void* _beepAllCallbackParam = nullptr; // gives error with SAMD21
106};
107#endif
void(* switchCallback_t)(void *)
Definition avdweb_Switch.h:44
Definition avdweb_Switch.h:46
bool equal
Definition avdweb_Switch.h:84
bool on()
Definition avdweb_Switch.cpp:259
bool lastInput
Definition avdweb_Switch.h:84
bool longPressDisable
Definition avdweb_Switch.h:85
bool singleClickDisable
Definition avdweb_Switch.h:85
unsigned long deglitchTime
Definition avdweb_Switch.h:81
void setLongPressCallback(switchCallback_t cb, void *param=nullptr)
Definition avdweb_Switch.cpp:304
unsigned long deglitchPeriod
Definition avdweb_Switch.h:69
void setSingleClickCallback(switchCallback_t cb, void *param=nullptr)
Definition avdweb_Switch.cpp:316
void * _pushedCallbackParam
Definition avdweb_Switch.h:99
bool longPress()
Definition avdweb_Switch.cpp:265
unsigned long debouncePeriod
Definition avdweb_Switch.h:69
void deglitch()
Definition avdweb_Switch.cpp:200
switchCallback_t _singleClickCallback
Definition avdweb_Switch.h:92
unsigned long pushedTime
Definition avdweb_Switch.h:81
unsigned long releasedTime
Definition avdweb_Switch.h:81
bool switched()
Definition avdweb_Switch.cpp:257
switchCallback_t _pushedCallback
Definition avdweb_Switch.h:88
bool poll()
Definition avdweb_Switch.cpp:172
bool process()
Definition avdweb_Switch.cpp:179
const byte pin
Definition avdweb_Switch.h:82
bool _doubleClick
Definition avdweb_Switch.h:85
void * _singleClickCallbackParam
Definition avdweb_Switch.h:103
bool _singleClick
Definition avdweb_Switch.h:85
void setDoubleClickCallback(switchCallback_t cb, void *param=nullptr)
Definition avdweb_Switch.cpp:310
void setReleasedCallback(switchCallback_t cb, void *param=nullptr)
Definition avdweb_Switch.cpp:298
bool singleClick()
Definition avdweb_Switch.cpp:269
bool deglitched
Definition avdweb_Switch.h:84
static switchCallback_t _beepAllCallback
Definition avdweb_Switch.h:94
void calcSingleClick()
Definition avdweb_Switch.cpp:225
bool released()
Definition avdweb_Switch.cpp:263
switchCallback_t _doubleClickCallback
Definition avdweb_Switch.h:91
void * _releasedCallbackParam
Definition avdweb_Switch.h:100
static void * _beepAllCallbackParam
Definition avdweb_Switch.h:104
bool input
Definition avdweb_Switch.h:84
void debounce()
Definition avdweb_Switch.cpp:216
unsigned long ms
Definition avdweb_Switch.h:81
bool debounced
Definition avdweb_Switch.h:84
bool doubleClick()
Definition avdweb_Switch.cpp:267
void setPushedCallback(switchCallback_t cb, void *param=nullptr)
Definition avdweb_Switch.cpp:292
void triggerCallbacks()
Definition avdweb_Switch.cpp:271
switchCallback_t _releasedCallback
Definition avdweb_Switch.h:89
void setBeepAllCallback(switchCallback_t cb, void *param=nullptr)
Definition avdweb_Switch.cpp:324
void * _longPressCallbackParam
Definition avdweb_Switch.h:101
bool _longPress
Definition avdweb_Switch.h:84
void calcDoubleClick()
Definition avdweb_Switch.cpp:241
unsigned long doubleClickPeriod
Definition avdweb_Switch.h:70
void * _doubleClickCallbackParam
Definition avdweb_Switch.h:102
unsigned long switchedTime
Definition avdweb_Switch.h:81
const bool polarity
Definition avdweb_Switch.h:83
bool _switched
Definition avdweb_Switch.h:84
unsigned long longPressPeriod
Definition avdweb_Switch.h:69
switchCallback_t _longPressCallback
Definition avdweb_Switch.h:90
bool pushed()
Definition avdweb_Switch.cpp:261
void calcLongPress()
Definition avdweb_Switch.cpp:246