Improved mouse movement

This commit is contained in:
Christoffer Martinsson 2022-10-17 23:02:08 +02:00
parent 5ab2312201
commit 8666c30a52

View File

@ -36,21 +36,21 @@
* | Shift | Z | X | C | V | B | | N | M | , | . | - | Shift/Enter | * | Shift | Z | X | C | V | B | | N | M | , | . | - | Shift/Enter |
* ----------------| M1/M2 | Alt | BSpc/Fn1 | | Spc/Fn1 | AltGr | Win |-------------------- * ----------------| M1/M2 | Alt | BSpc/Fn1 | | Spc/Fn1 | AltGr | Win |--------------------
* -------------------------- ------------------------- * -------------------------- -------------------------
* Layer 1 * Layer 1
* ------------------------------------------ --------------------------------------------- * ------------------------------------------ ---------------------------------------------
* | Tab/Fn2 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | * | Tab/Fn2 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
* | Ctrl/Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | + | * | Ctrl/Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | + |
* | Shift | § | Del | Esc | < | | | | ' | ¨ | ´ | | Shift/Enter | * | Shift | § | Del | Esc | < | | | | ' | ¨ | ´ | | Shift/Enter |
* ----------------| M1/M2 | Alt | BSpc/Fn1 | | Spc/Fn1 | AltGr | Win |-------------------- * ----------------| M1/M2 | Alt | BSpc/Fn1 | | Spc/Fn1 | AltGr | Win |--------------------
* -------------------------- ------------------------- * -------------------------- -------------------------
* Layer 2 * Layer 2
* ------------------------------------------ --------------------------------------------- * ------------------------------------------ ---------------------------------------------
* | Tab/Fn2 | F12 | F13 | F14 | F15 | F16 | | ML | MD | MU | MR | | CapsLock | * | Tab/Fn2 | F12 | F13 | F14 | F15 | F16 | | ML | MD | MU | MR | | CapsLock |
* | Ctrl/Esc | Prev| Play| Next| | | | Left| Down| Up |Right| | | * | Ctrl/Esc | Prev| Play| Next| | | | Left| Down| Up |Right| | |
* | Shift | | | | | | | Home| PgD | PgU | End | Ins | Shift/Enter | * | Shift | | | | | | | Home| PgD | PgU | End | Ins | Shift/Enter |
* ----------------| M1/M2 | Alt | BSpc/Fn1 | | Spc/Fn1 | AltGr | Win |-------------------- * ----------------| M1/M2 | Alt | BSpc/Fn1 | | Spc/Fn1 | AltGr | Win |--------------------
* -------------------------- ------------------------- * -------------------------- -------------------------
* Game mode * Game mode
* ------------------------------------------ --------------------------------------------- * ------------------------------------------ ---------------------------------------------
* | Tab | | | | | | | | | | | | | * | Tab | | | | | | | | | | | | |
* | Ctrl | | | | | | | | | | | | | * | Ctrl | | | | | | | | | | | | |
@ -69,7 +69,7 @@
* - 0 LED off = Normal mode * - 0 LED off = Normal mode
* - 1 LED constant on = Game mode * - 1 LED constant on = Game mode
* - 2 LED flashing = Caps Lock activated * - 2 LED flashing = Caps Lock activated
* * Game mode: Replaces all layer keys with a "Game mode KEY". Configurable for each button * * Game mode: Replaces all layer keys with a "Game mode KEY". Configurable for each button
* * Tap/Hold functionality (only for layer0) * * Tap/Hold functionality (only for layer0)
* * Combo key (up to three simultaneous keys) support. Configurable for each button * * Combo key (up to three simultaneous keys) support. Configurable for each button
*/ */
@ -136,8 +136,8 @@ Keypad kp_keypad = Keypad(makeKeymap(kp_keys), kp_rowPins, kp_colPins, KP_ROWS,
Button buttons[NBR_OF_BUTTONS] = Button buttons[NBR_OF_BUTTONS] =
{ {
{1, KEY_FN2, KEY_TAB, NO_KEY, NO_KEY, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false}, {1, KEY_FN2, KEY_TAB, NO_KEY, NO_KEY, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false},
{2, KEY_Q, NO_KEY, KEY_F1, KEY_F12, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false}, {2, KEY_ML, NO_KEY, KEY_F1, KEY_F12, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false},
{3, KEY_W, NO_KEY, KEY_F2, KEY_F13, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false}, {3, KEY_MR, NO_KEY, KEY_F2, KEY_F13, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false},
{4, KEY_E, NO_KEY, KEY_F3, KEY_F14, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false}, {4, KEY_E, NO_KEY, KEY_F3, KEY_F14, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false},
{5, KEY_R, NO_KEY, KEY_F4, KEY_F15, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false}, {5, KEY_R, NO_KEY, KEY_F4, KEY_F15, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false},
{6, KEY_T, NO_KEY, KEY_F5, KEY_F16, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false}, {6, KEY_T, NO_KEY, KEY_F5, KEY_F16, NO_KEY, true, {NO_KEY, NO_KEY, NO_KEY}, IDLE, false, 0, false, false, 0, 0, false},
@ -242,6 +242,10 @@ unsigned long button_timestamp = 0;
unsigned long mouse_wheel_timestamp = 0; unsigned long mouse_wheel_timestamp = 0;
unsigned long indicator_timestamp = 0; unsigned long indicator_timestamp = 0;
bool mouse_l = false;
bool mouse_r = false;
bool mouse_u = false;
bool mouse_d = false;
int mouse_x = 0; int mouse_x = 0;
int mouse_y = 0; int mouse_y = 0;
int mouse_wheel = 0; int mouse_wheel = 0;
@ -302,26 +306,40 @@ bool set_key(uint16_t keycode, uint8_t kstate)
{ {
if (kstate == RELEASED) if (kstate == RELEASED)
{ {
mouse_x = 0; if (keycode == KEY_ML)
mouse_y = 0; {
mouse_l = false;
}
if (keycode == KEY_MR)
{
mouse_r = false;
}
if (keycode == KEY_MU)
{
mouse_u = false;
}
if (keycode == KEY_MD)
{
mouse_d = false;
}
} }
else if (kstate == PRESSED) else if (kstate == PRESSED)
{ {
if (keycode == KEY_MU) if (keycode == KEY_MU)
{ {
mouse_y = -10; mouse_u = true;
} }
else if (keycode == KEY_MD) else if (keycode == KEY_MD)
{ {
mouse_y = 10; mouse_d = true;
} }
else if (keycode == KEY_MR) else if (keycode == KEY_MR)
{ {
mouse_x = 10; mouse_r = true;
} }
else if (keycode == KEY_ML) else if (keycode == KEY_ML)
{ {
mouse_x = -10; mouse_l = true;
} }
} }
} }
@ -527,7 +545,7 @@ void scan_buttons()
{ {
if (buttons[i].gm_keycode == KEY_COMBO) if (buttons[i].gm_keycode == KEY_COMBO)
{ {
/* Sending press command for all combo keys */ /* Sending press command for all combo keys */
for (int j = 0; j < 3; j++) for (int j = 0; j < 3; j++)
{ {
set_key(buttons[i].combo_keycode[j], PRESSED); set_key(buttons[i].combo_keycode[j], PRESSED);
@ -542,7 +560,7 @@ void scan_buttons()
{ {
if (buttons[i].fn1_keycode == KEY_COMBO) if (buttons[i].fn1_keycode == KEY_COMBO)
{ {
/* Sending press command for all combo keys */ /* Sending press command for all combo keys */
for (int j = 0; j < 3; j++) for (int j = 0; j < 3; j++)
{ {
set_key(buttons[i].combo_keycode[j], PRESSED); set_key(buttons[i].combo_keycode[j], PRESSED);
@ -557,7 +575,7 @@ void scan_buttons()
{ {
if (buttons[i].fn2_keycode == KEY_COMBO) if (buttons[i].fn2_keycode == KEY_COMBO)
{ {
/* Sending press command for all combo keys */ /* Sending press command for all combo keys */
for (int j = 0; j < 3; j++) for (int j = 0; j < 3; j++)
{ {
set_key(buttons[i].combo_keycode[j], PRESSED); set_key(buttons[i].combo_keycode[j], PRESSED);
@ -572,7 +590,7 @@ void scan_buttons()
{ {
if (buttons[i].keycode == KEY_COMBO) if (buttons[i].keycode == KEY_COMBO)
{ {
/* Sending press command for all combo keys */ /* Sending press command for all combo keys */
for (int j = 0; j < 3; j++) for (int j = 0; j < 3; j++)
{ {
set_key(buttons[i].combo_keycode[j], PRESSED); set_key(buttons[i].combo_keycode[j], PRESSED);
@ -616,7 +634,7 @@ void scan_buttons()
{ {
if (buttons[i].gm_keycode == KEY_COMBO) if (buttons[i].gm_keycode == KEY_COMBO)
{ {
/* Sending release command for all combo keys */ /* Sending release command for all combo keys */
for (int j = 0; j < 3; j++) for (int j = 0; j < 3; j++)
{ {
set_key(buttons[i].combo_keycode[j], RELEASED); set_key(buttons[i].combo_keycode[j], RELEASED);
@ -629,13 +647,13 @@ void scan_buttons()
} }
else else
{ {
/* Sending release command for all combo keys */ /* Sending release command for all combo keys */
for (int j = 0; j < 3; j++) for (int j = 0; j < 3; j++)
{ {
set_key(buttons[i].combo_keycode[j], RELEASED); set_key(buttons[i].combo_keycode[j], RELEASED);
} }
/* Sending release command for all other keycodes related to this button */ /* Sending release command for all other keycodes related to this button */
set_key(buttons[i].fn2_keycode, RELEASED); set_key(buttons[i].fn2_keycode, RELEASED);
set_key(buttons[i].fn1_keycode, RELEASED); set_key(buttons[i].fn1_keycode, RELEASED);
set_key(buttons[i].keycode, RELEASED); set_key(buttons[i].keycode, RELEASED);
@ -719,9 +737,49 @@ void loop()
} }
/* Update mouse 20ms */ /* Update mouse 20ms */
if (current_timestamp >= mouse_wheel_timestamp && mouse_wheel != 0) if (current_timestamp >= mouse_wheel_timestamp && (mouse_wheel != 0 || mouse_x != 0 || mouse_y != 0 || mouse_d == true || mouse_l == true || mouse_r == true || mouse_u == true))
{ {
/* Stop movement when no buttons are pressed */
if (mouse_d == false && mouse_u == false)
{
mouse_y = 0;
}
if (mouse_l == false && mouse_r == false)
{
mouse_x = 0;
}
/* Stop movement when both up/down or left/right are pressed */
if (mouse_d == true && mouse_u == true)
{
mouse_y = 0;
}
if (mouse_l == true && mouse_r == true)
{
mouse_x = 0;
}
/* Move mouse cursor/wheel */
Mouse.move(mouse_x, mouse_y, mouse_wheel); Mouse.move(mouse_x, mouse_y, mouse_wheel);
/* Add mouse acceleration for next movement */
if (mouse_r == true && mouse_x < 50)
{
mouse_x++;
}
if (mouse_l == true && mouse_x > -50)
{
mouse_x--;
}
if (mouse_d == true && mouse_y < 50)
{
mouse_y++;
}
if (mouse_u == true && mouse_y > -50)
{
mouse_y--;
}
mouse_wheel_timestamp = current_timestamp + 20; mouse_wheel_timestamp = current_timestamp + 20;
} }