Compare commits

...

1 Commits

Author SHA1 Message Date
fluffy b450b4c9bd Implement debounce 2021-05-10 01:20:10 -07:00
1 changed files with 24 additions and 12 deletions

View File

@ -1,21 +1,29 @@
/*@ file DDRunino.ino /*@ file DDRunino.ino
* *
* Simple Arduino sketch to run a DDR pad as a keyboard * Simple Arduino sketch to run a DDR pad as a keyboard
* *
* https://git.beesbuzz.biz/fluffy/DDRuino/ * https://git.beesbuzz.biz/fluffy/DDRuino/
*/ */
#include <Keyboard.h> #include <Keyboard.h>
// Uncomment this to enable the serial debugger to determine the pin mappings //! Uncomment this to enable the serial debugger to determine the pin mappings
//#define DEBUG //#define DEBUG
//! Debounce time in milliseconds
constexpr int debounceTime = 50;
//! Input button
struct Input { struct Input {
int pin; int pin; //!< Input pin
int keyCode; int keyCode; //!< Mapped key
bool state; bool pressed; //!< Last read state
unsigned long lastChange; //!< Last update time
}; };
/*! Map the input pins to a button on the pad; use debug mode to determine
* your button layout if you're not sure
*/
Input mapping[] = { Input mapping[] = {
{ 4, KEY_RETURN }, { 4, KEY_RETURN },
{ 5, KEY_ESC }, { 5, KEY_ESC },
@ -27,17 +35,20 @@ Input mapping[] = {
void setup() void setup()
{ {
#ifdef DEBUG
Serial.begin(9600); Serial.begin(9600);
#ifdef DEBUG
for (int i = 0; i < 12; i++) { for (int i = 0; i < 12; i++) {
pinMode(i, INPUT_PULLUP); pinMode(i, INPUT_PULLUP);
} }
#endif #endif
unsigned long now = millis();
for (auto i : mapping) { for (auto i : mapping) {
pinMode(i.pin, INPUT_PULLUP); pinMode(i.pin, INPUT_PULLUP);
i.state = HIGH; i.pressed = false;
i.lastChange = now;
} }
Keyboard.begin(); Keyboard.begin();
@ -51,18 +62,19 @@ void loop()
} }
Serial.print('\n'); Serial.print('\n');
#endif #endif
for (auto& i : mapping) { for (auto& i : mapping) {
unsigned long now = millis();
bool val = !digitalRead(i.pin); bool val = !digitalRead(i.pin);
if (val != i.state) { if (val != i.pressed && (i.lastChange + debounceTime) < now) {
if (val) { if (val) {
// TODO debounce
Keyboard.press(i.keyCode); Keyboard.press(i.keyCode);
} else { } else {
Keyboard.release(i.keyCode); Keyboard.release(i.keyCode);
} }
i.state = val; i.pressed = val;
i.lastChange = now;
} }
} }
} }