@@ -4,6 +4,23 @@ For return, 1 means debounced changed. | |||
*/ | |||
#include "Row.h" | |||
/* | |||
process() scans the row and calls any newly pressed or released keys. | |||
*/ | |||
void Row::process(const bool activeHigh) | |||
{ | |||
//these variables are all bitwise, one bit per key | |||
uint8_t rowState; //1 means pressed, 0 means released | |||
uint16_t rowEnd; //1 bit marks positioned after last key of row | |||
uint8_t debouncedChanged; //1 means debounced changed | |||
wait(); | |||
scan(activeHigh); //save column-port-pin values to portState | |||
rowState = getRowState(rowEnd, activeHigh); | |||
debouncedChanged = debounce(rowState); | |||
pressRelease(rowEnd, debouncedChanged); | |||
} | |||
uint8_t Row::debounce(const uint8_t rowState) | |||
{ | |||
return debouncer.debounce(rowState, debounced); |
@@ -26,5 +26,6 @@ class Row : public RowBase | |||
{ | |||
Debouncer_4Samples debouncer; | |||
} | |||
virtual void process(const bool activeHigh); | |||
}; | |||
#endif |
@@ -1,21 +1,4 @@ | |||
#include "RowBase.h" | |||
/* | |||
scans the row and calls any newly pressed or released keys. | |||
*/ | |||
void RowBase::process(const bool activeHigh) | |||
{ | |||
//these variables are all bitwise, one bit per key | |||
uint8_t rowState; //1 means pressed, 0 means released | |||
uint16_t rowEnd; //1 bit marks positioned after last key of row | |||
uint8_t debouncedChanged; //1 means debounced changed | |||
wait(); | |||
scan(activeHigh); //save column-port-pin values to portState | |||
rowState = getRowState(rowEnd, activeHigh); | |||
debouncedChanged = debounce(rowState); | |||
pressRelease(rowEnd, debouncedChanged); | |||
} | |||
/* wait() delay's scan to give switches time to debounce. | |||
This version of wait() is very simple. More sophisticated versions can override this one. | |||
@@ -20,14 +20,15 @@ class RowBase | |||
ColPort *const *const ptrsColPorts; //array of column ports | |||
const uint8_t colPortCount; | |||
virtual void keyWasPressed(); | |||
protected: | |||
uint8_t debounced; //bitwise, 1 means pressed, 0 means released | |||
void wait(); | |||
void scan(const bool activeHigh); | |||
uint8_t getRowState(uint16_t& rowEnd, const bool activeHigh); | |||
virtual uint8_t debounce(const uint8_t rowState)=0; | |||
void pressRelease(const uint16_t rowEnd, const uint8_t debouncedChanged); | |||
virtual void keyWasPressed(); | |||
protected: | |||
uint8_t debounced; //bitwise, 1 means pressed, 0 means released | |||
public: | |||
RowBase( RowPort &refRowPort, const uint8_t rowPin, | |||
ColPort *const ptrsColPorts[], const uint8_t colPortCount, | |||
@@ -35,7 +36,6 @@ class RowBase | |||
: ptrsKeys(ptrsKeys), refRowPort(refRowPort), rowPin(rowPin), | |||
ptrsColPorts(ptrsColPorts), colPortCount(colPortCount), | |||
debounced(0) { } | |||
//Key* getPtrKey(uint8_t col) const; todo delete, no longer needed 5/31/16 | |||
void process(const bool activeHigh); | |||
virtual void process(const bool activeHigh)=0; | |||
}; | |||
#endif |