81 lines
2.3 KiB
C++
81 lines
2.3 KiB
C++
/////////////////////////////////////////////////////////////////
|
|
/*
|
|
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
|
|
/////////////////////////////////////////////////////////////////
|