60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
|
// "Readers" represent different methods for reading the state of a pin.
|
||
|
// They also include debouncing logic using the Bounce2 library, when appropriate.
|
||
|
|
||
|
#ifndef _READER_H_
|
||
|
#define _READER_H_
|
||
|
|
||
|
#include <Bounce2.h>
|
||
|
#include <Mux.h>
|
||
|
|
||
|
// The abstract base class - a very simple interface
|
||
|
class Reader {
|
||
|
public:
|
||
|
Reader(bool inverted);
|
||
|
|
||
|
virtual bool Update() = 0; // should return true if the state of the pin has changed
|
||
|
bool On();
|
||
|
|
||
|
protected:
|
||
|
uint8_t getMode(bool pullup);
|
||
|
|
||
|
Bounce bouncer;
|
||
|
bool inverted;
|
||
|
};
|
||
|
|
||
|
|
||
|
// A standard reader; the button is connected directly to a switch
|
||
|
class DirectReader {
|
||
|
public:
|
||
|
DirectReader(uint8_t pin, bool inverted = true);
|
||
|
bool Update();
|
||
|
bool On();
|
||
|
};
|
||
|
|
||
|
|
||
|
// The button is connected to a Multiplexer channel
|
||
|
class MuxReader {
|
||
|
public:
|
||
|
MuxReader(uint8_t channel, Mux* mux, bool inverted = true);
|
||
|
bool Update();
|
||
|
bool On();
|
||
|
|
||
|
protected:
|
||
|
Mux * mux;
|
||
|
};
|
||
|
|
||
|
|
||
|
// The button is connected via a scan matrix
|
||
|
// "row" should always be the input, with "col" the selecter.
|
||
|
class MatrixReader {
|
||
|
public:
|
||
|
MatrixReader(uint8_t row, uint8_t col, bool inverted = true);
|
||
|
bool Update();
|
||
|
bool On();
|
||
|
|
||
|
protected:
|
||
|
uint8_t col;
|
||
|
};
|
||
|
|
||
|
#endif
|