diff --git a/Code/devterm_keyboard/devterm.h b/Code/devterm_keyboard/devterm.h index 9089046..8e42577 100644 --- a/Code/devterm_keyboard/devterm.h +++ b/Code/devterm_keyboard/devterm.h @@ -3,6 +3,12 @@ #include +typedef struct key_debouncing{ + + bool deing;//debouncing + uint16_t de_time; + +}KEY_DEB; typedef struct keyboard_state{ diff --git a/Code/devterm_keyboard/keyboard.ino b/Code/devterm_keyboard/keyboard.ino index 40d37ba..bbd6e26 100644 --- a/Code/devterm_keyboard/keyboard.ino +++ b/Code/devterm_keyboard/keyboard.ino @@ -1,9 +1,7 @@ #include "keyboard.h" #include "helper.h" - -static bool debouncing = false; -static uint16_t debouncing_time = 0; +KEY_DEB keyboard_debouncing; uint8_t matrix_rows[ MATRIX_ROWS ]= {ROW1,ROW2,ROW3,ROW4,ROW5,ROW6,ROW7,ROW8}; uint8_t matrix_cols[ MATRIX_COLS ] = {COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8}; @@ -48,7 +46,8 @@ void matrix_init() { matrix_debouncing[i] = 0; matrix_prev[i] = 0; } - + + delay(500); } @@ -76,12 +75,12 @@ uint8_t matrix_scan(void) { digitalWrite(matrix_cols[col],LOW); if (matrix_debouncing[col] != data) { matrix_debouncing[col] = data; - debouncing = true; - debouncing_time = millis(); + keyboard_debouncing.deing = true; + keyboard_debouncing.de_time = millis(); } } - if (debouncing == true && ( (millis() - debouncing_time) > DEBOUNCE )) { + if (keyboard_debouncing.deing == true && ( (millis() - keyboard_debouncing.de_time) > DEBOUNCE )) { for (int row = 0; row < MATRIX_ROWS; row++) { matrix[row] = 0; for (int col = 0; col < MATRIX_COLS; col++) { @@ -89,7 +88,7 @@ uint8_t matrix_scan(void) { } } - debouncing = false; + keyboard_debouncing.deing = false; } return 1; @@ -112,7 +111,7 @@ void matrix_press(DEVTERM*dv,uint8_t row,uint8_t col) { if(matrix_is_on(row,col) == true ){ sprintf(buff,"%d %d M%d pressed\n",row,col,(row+1)*10+col+1); - dv->_Serial->print(buff); + //dv->_Serial->print(buff); keyboard_action(dv,row,col,KEY_PRESSED); } @@ -124,7 +123,7 @@ void matrix_release(DEVTERM*dv,uint8_t row,uint8_t col) { if(matrix_is_on(row,col) == false ){ sprintf(buff,"%d %d M%d released\n",row,col,(row+1)*10+col+1); - dv->_Serial->print(buff); + //dv->_Serial->print(buff); keyboard_action(dv,row,col,KEY_RELEASED); } @@ -165,7 +164,7 @@ void keyboard_task(DEVTERM*dv) jack_idx = r*MATRIX_ROWS+c; }else{ jack_time +=1; - if( jack_time % (DEBOUNCE*20) == 0){ + if( jack_time % (DEBOUNCE*40) == 0){ if(jack_idx > 1){//skip select,start button matrix_press(dv,r,c); } @@ -184,5 +183,7 @@ void keyboard_task(DEVTERM*dv) void keyboard_init(DEVTERM*){ matrix_init(); - + keyboard_debouncing.deing=false; + keyboard_debouncing.de_time = 0; + } diff --git a/Code/devterm_keyboard/keymaps.ino b/Code/devterm_keyboard/keymaps.ino index 0b5a4f9..ac59ba9 100644 --- a/Code/devterm_keyboard/keymaps.ino +++ b/Code/devterm_keyboard/keymaps.ino @@ -225,8 +225,10 @@ void keypad_action(DEVTERM*dv,uint8_t col,uint8_t mode) { case _FN_KEY: if(mode == KEY_PRESSED){ dv->Keyboard_state.layer = FN_LAYER; + dv->_Serial->println("into fn layer"); }else if(mode == KEY_RELEASED ) { dv->Keyboard_state.layer = DEF_LAYER; + dv->_Serial->println("leave fn layer"); } break; diff --git a/Code/devterm_keyboard/keys.ino b/Code/devterm_keyboard/keys.ino index 86ed779..8606f56 100644 --- a/Code/devterm_keyboard/keys.ino +++ b/Code/devterm_keyboard/keys.ino @@ -1,7 +1,6 @@ #include "keys.h" -static bool key_debouncing = false; -static uint16_t key_debouncing_time = 0; +KEY_DEB keypad_debouncing; uint8_t keys_io[ KEYS_NUM ]= {KEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7,KEY8,KEY9,KEY10,KEY11,KEY12,KEY13,KEY14,KEY15,KEY16}; @@ -39,13 +38,15 @@ uint8_t scan_keys(){ if ( keys_debouncing != data ) { keys_debouncing = data; - key_debouncing = true; - key_debouncing_time = millis(); + + keypad_debouncing.deing = true; + keypad_debouncing.de_time = millis(); + } - if (key_debouncing == true && ( (millis() - key_debouncing_time) > KEY_DEBOUNCE )) { + if (keypad_debouncing.deing == true && ( (millis() - keypad_debouncing.de_time) > KEY_DEBOUNCE )) { keys = keys_debouncing; - debouncing = false; + keypad_debouncing.deing = false; } return 1; @@ -67,7 +68,7 @@ void print_keys(DEVTERM*dv) { void keys_task(DEVTERM*dv){ - uint16_t _change = 0; + scan_keys(); @@ -92,7 +93,7 @@ void keys_task(DEVTERM*dv){ keys_jack_idx = c; }else{ keys_jack_time +=1; - if( keys_jack_time % (KEY_DEBOUNCE*20) == 0){ + if( keys_jack_time % (KEY_DEBOUNCE*40) == 0){ keypad_action(dv,c,KEY_PRESSED); } } @@ -112,4 +113,7 @@ void keys_init(DEVTERM*dv){ dv->Joystick->X(511); dv->Joystick->Y(511); + keypad_debouncing.deing = false; + keypad_debouncing.de_time = 0; + }