From 191626d7365125bdfaa34664292892359433ac03 Mon Sep 17 00:00:00 2001 From: cuu Date: Sat, 12 Jun 2021 20:56:18 +0800 Subject: [PATCH] add PULLUP for keyboard --- Code/devterm_keyboard/devterm.h | 1 + Code/devterm_keyboard/helper.ino | 1 - Code/devterm_keyboard/keyboard.h | 2 +- Code/devterm_keyboard/keyboard.ino | 56 ++++++++++++++++++++++++------ Code/devterm_keyboard/keys.ino | 15 ++++---- 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/Code/devterm_keyboard/devterm.h b/Code/devterm_keyboard/devterm.h index 84a3f6b..ce0bfdd 100644 --- a/Code/devterm_keyboard/devterm.h +++ b/Code/devterm_keyboard/devterm.h @@ -34,5 +34,6 @@ class DEVTERM { //USBSerial *_Serial;//_Serial = &Serial; }; +#define KEYBOARD_PULL 1 // 1 for PULLUP, 0 FOR PULLDOWN #endif diff --git a/Code/devterm_keyboard/helper.ino b/Code/devterm_keyboard/helper.ino index 29e95b5..24645e2 100644 --- a/Code/devterm_keyboard/helper.ino +++ b/Code/devterm_keyboard/helper.ino @@ -2,7 +2,6 @@ uint8_t read_io(uint8_t io) { - if(digitalRead(io) == LOW ){ return 0; }else { diff --git a/Code/devterm_keyboard/keyboard.h b/Code/devterm_keyboard/keyboard.h index 6c24984..e10143c 100644 --- a/Code/devterm_keyboard/keyboard.h +++ b/Code/devterm_keyboard/keyboard.h @@ -20,7 +20,7 @@ #define MATRIX_KEYS 64 // 8*8 #ifndef DEBOUNCE -# define DEBOUNCE 5 +# define DEBOUNCE 20 #endif void init_rows(); diff --git a/Code/devterm_keyboard/keyboard.ino b/Code/devterm_keyboard/keyboard.ino index 8ad6a4f..cee163f 100644 --- a/Code/devterm_keyboard/keyboard.ino +++ b/Code/devterm_keyboard/keyboard.ino @@ -11,13 +11,37 @@ static uint8_t matrix[MATRIX_ROWS]; static uint8_t matrix_debouncing[MATRIX_COLS]; static uint8_t matrix_prev[MATRIX_ROWS]; +uint8_t read_kbd_io(uint8_t io) { + +#if defined KEYBOARD_PULL && KEYBOARD_PULL == 0 + if(digitalRead(io) == LOW ){ + return 0; + }else { + return 1; + } +#elif defined KEYBOARD_PULL && KEYBOARD_PULL == 1 + if(digitalRead(io) == LOW ){ + return 1; + }else { + return 0; + } +#endif + +} + void init_rows(){ int i; for(i=0;i<8;i++) { + +#if defined KEYBOARD_PULL && KEYBOARD_PULL == 0 pinMode(matrix_rows[i],OUTPUT); digitalWrite(matrix_rows[i],LOW); + pinMode(matrix_rows[i],INPUT_PULLDOWN); - pinMode(matrix_rows[i],INPUT_PULLDOWN); +#elif defined KEYBOARD_PULL && KEYBOARD_PULL == 1 + pinMode(matrix_rows[i],INPUT_PULLUP); +#endif + } } @@ -51,23 +75,33 @@ uint8_t matrix_scan(void) { uint8_t data; for(int col = 0; col < MATRIX_COLS;col++){ data = 0; - digitalWrite(matrix_cols[col],HIGH); - + +#if defined KEYBOARD_PULL && KEYBOARD_PULL == 1 + digitalWrite(matrix_cols[col],LOW); +#elif defined KEYBOARD_PULL && KEYBOARD_PULL == 0 + digitalWrite(matrix_cols[col],HIGH); + +#endif delayMicroseconds(30); data =( - ( read_io(matrix_rows[0]) << 0 ) | - ( read_io(matrix_rows[1]) << 1 ) | - ( read_io(matrix_rows[2]) << 2 ) | - ( read_io(matrix_rows[3]) << 3 ) | - ( read_io(matrix_rows[4]) << 4 ) | - ( read_io(matrix_rows[5]) << 5 ) | - ( read_io(matrix_rows[6]) << 6 ) | - ( read_io(matrix_rows[7]) << 7 ) + ( read_kbd_io(matrix_rows[0]) << 0 ) | + ( read_kbd_io(matrix_rows[1]) << 1 ) | + ( read_kbd_io(matrix_rows[2]) << 2 ) | + ( read_kbd_io(matrix_rows[3]) << 3 ) | + ( read_kbd_io(matrix_rows[4]) << 4 ) | + ( read_kbd_io(matrix_rows[5]) << 5 ) | + ( read_kbd_io(matrix_rows[6]) << 6 ) | + ( read_kbd_io(matrix_rows[7]) << 7 ) ); +#if defined KEYBOARD_PULL && KEYBOARD_PULL == 1 + digitalWrite(matrix_cols[col],HIGH); +#elif defined KEYBOARD_PULL && KEYBOARD_PULL == 0 digitalWrite(matrix_cols[col],LOW); +#endif + if (matrix_debouncing[col] != data) { matrix_debouncing[col] = data; keyboard_debouncing.deing = true; diff --git a/Code/devterm_keyboard/keys.ino b/Code/devterm_keyboard/keys.ino index 1d9883f..64db186 100644 --- a/Code/devterm_keyboard/keys.ino +++ b/Code/devterm_keyboard/keys.ino @@ -12,7 +12,9 @@ static uint16_t keys_prev; void init_keys(){ int i; for(i=0;i