///////////////////////////////////////////////////////////////// /* Button2.cpp - Arduino Library to simplify working with buttons. Created by Lennart Hennigs, October 28, 2017. */ ///////////////////////////////////////////////////////////////// #pragma once #ifndef Button2_h #define Button2_h ///////////////////////////////////////////////////////////////// #include "Arduino.h" ///////////////////////////////////////////////////////////////// #define DEBOUNCE_MS 50 #define LONGCLICK_MS 250 #define DOUBLECLICK_MS 400 #define SINGLE_CLICK 1 #define DOUBLE_CLICK 2 #define TRIPLE_CLICK 3 #define LONG_CLICK 4 ///////////////////////////////////////////////////////////////// class Button2 { private: byte pin; int prev_state; int state = HIGH; byte click_count = 0; unsigned int last_click_type = 0; unsigned long click_ms; unsigned long down_ms; unsigned int debounce_time_ms; unsigned int down_time_ms = 0; bool pressed_triggered = false; bool longclick_detected = false; typedef void (*CallbackFunction) (Button2&); CallbackFunction pressed_cb = NULL; CallbackFunction released_cb = NULL; CallbackFunction change_cb = NULL; CallbackFunction tap_cb = NULL; CallbackFunction click_cb = NULL; CallbackFunction long_cb = NULL; CallbackFunction double_cb = NULL; CallbackFunction triple_cb = NULL; public: Button2(){pin = -1;} Button2(byte attachTo, byte buttonMode = INPUT_PULLUP, unsigned int debounceTimeout = DEBOUNCE_MS); void setDebounceTime(unsigned int ms); void setChangedHandler(CallbackFunction f); void setPressedHandler(CallbackFunction f); void setReleasedHandler(CallbackFunction f); void setClickHandler(CallbackFunction f); void setTapHandler(CallbackFunction f); void setLongClickHandler(CallbackFunction f); void setDoubleClickHandler(CallbackFunction f); void setTripleClickHandler(CallbackFunction f); unsigned int wasPressedFor(); boolean isPressed(); unsigned int getNumberOfClicks(); unsigned int getClickType(); uint8_t getAttachPin(){return pin;} bool operator==(Button2 &rhs); void loop(); }; ///////////////////////////////////////////////////////////////// #endif /////////////////////////////////////////////////////////////////