MeshCore/src/helpers/ui/MomentaryButton.h

34 lines
944 B
C
Raw Normal View History

2025-08-08 20:01:31 +10:00
#pragma once
#include <Arduino.h>
#define BUTTON_EVENT_NONE 0
#define BUTTON_EVENT_CLICK 1
#define BUTTON_EVENT_LONG_PRESS 2
#define BUTTON_EVENT_DOUBLE_CLICK 3
#define BUTTON_EVENT_TRIPLE_CLICK 4
2025-08-08 20:01:31 +10:00
class MomentaryButton {
int8_t _pin;
int8_t prev, cancel;
bool _reverse, _pull;
2025-08-08 20:01:31 +10:00
int _long_millis;
int _threshold; // analog mode
2025-08-08 20:01:31 +10:00
unsigned long down_at;
uint8_t _click_count;
unsigned long _last_click_time;
int _multi_click_window;
bool _pending_click;
2025-08-08 20:01:31 +10:00
bool isPressed(int level) const;
public:
MomentaryButton(int8_t pin, int long_press_mills=0, bool reverse=false, bool pulldownup=false);
MomentaryButton(int8_t pin, int long_press_mills, int analog_threshold);
void begin();
2025-08-08 20:01:31 +10:00
int check(bool repeat_click=false); // returns one of BUTTON_EVENT_*
void cancelClick(); // suppress next BUTTON_EVENT_CLICK (if already in DOWN state)
uint8_t getPin() { return _pin; }
bool isPressed() const;
};