updated to latest version of keypad library from Github, changes for inverted logic are explicitely marked

This commit is contained in:
KlausMu 2024-01-23 10:52:27 +01:00
parent 71c5ce01d2
commit 87573950e8
3 changed files with 33 additions and 4 deletions

View file

@ -15,7 +15,7 @@ byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
unsigned long loopCount = 0;
unsigned long timer_t = 0;
unsigned long timer_ms = 0;
void setup(){
Serial.begin(9600);
@ -33,12 +33,12 @@ void loop(){
// you a relative idea of just how much the debounceTime has changed the
// speed of your code. If you set a high debounceTime your loopCount will
// look good but your keypresses will start to feel sluggish.
if ((millis() - timer_t) > 1000) {
if ((millis() - timer_ms) > 1000) {
Serial.print("Your loop code ran ");
Serial.print(loopCount);
Serial.println(" times over the last second");
loopCount = 0;
timer_t = millis();
timer_ms = millis();
}
loopCount++;
if(key)

View file

@ -83,18 +83,31 @@ bool Keypad::getKeys() {
void Keypad::scanKeys() {
// Re-intialize the row pins. Allows sharing these pins with other hardware.
for (byte r=0; r<sizeKpd.rows; r++) {
// Logic needs to be inverted. This way the ESP32s EXT1 wakeup can be used to detect if the accelerometer pin or any button pin goes high
// original from Keypad
// pin_mode(rowPins[r],INPUT_PULLUP);
// changed for usage in OMOTE
pin_mode(rowPins[r],INPUT);
}
// bitMap stores ALL the keys that are being pressed.
for (byte c=0; c<sizeKpd.columns; c++) {
pin_mode(columnPins[c],OUTPUT);
// original from Keypad
// pin_write(columnPins[c], LOW); // Begin column pulse output.
// changed for usage in OMOTE
pin_write(columnPins[c], HIGH); // Begin column pulse output.
for (byte r=0; r<sizeKpd.rows; r++) {
// original from Keypad
// bitWrite(bitMap[r], c, !pin_read(rowPins[r])); // keypress is active low so invert to high.
// changed for usage in OMOTE
bitWrite(bitMap[r], c, pin_read(rowPins[r])); // keypress is active low so invert to high.
}
// Set pin to high impedance input. Effectively ends column pulse.
pin_write(columnPins[c],LOW);
// original from Keypad
// pin_write(columnPins[c],HIGH);
// changed for usage in OMOTE
pin_write(columnPins[c], LOW);
pin_mode(columnPins[c],INPUT);
}
}

View file

@ -35,6 +35,22 @@
#include "Key.h"
// bperrybap - Thanks for a well reasoned argument and the following macro(s).
// See http://arduino.cc/forum/index.php/topic,142041.msg1069480.html#msg1069480
#ifndef INPUT_PULLUP
#warning "Using pinMode() INPUT_PULLUP AVR emulation"
#define INPUT_PULLUP 0x2
#define pinMode(_pin, _mode) _mypinMode(_pin, _mode)
#define _mypinMode(_pin, _mode) \
do { \
if(_mode == INPUT_PULLUP) \
pinMode(_pin, INPUT); \
digitalWrite(_pin, 1); \
if(_mode != INPUT_PULLUP) \
pinMode(_pin, _mode); \
}while(0)
#endif
#define OPEN LOW
#define CLOSED HIGH