Improved mouse movement

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

View File

@ -136,8 +136,8 @@ Keypad kp_keypad = Keypad(makeKeymap(kp_keys), kp_rowPins, kp_colPins, KP_ROWS,
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},
{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},
{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},
{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_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},
{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},
@ -242,6 +242,10 @@ unsigned long button_timestamp = 0;
unsigned long mouse_wheel_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_y = 0;
int mouse_wheel = 0;
@ -302,26 +306,40 @@ bool set_key(uint16_t keycode, uint8_t kstate)
{
if (kstate == RELEASED)
{
mouse_x = 0;
mouse_y = 0;
if (keycode == KEY_ML)
{
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)
{
if (keycode == KEY_MU)
{
mouse_y = -10;
mouse_u = true;
}
else if (keycode == KEY_MD)
{
mouse_y = 10;
mouse_d = true;
}
else if (keycode == KEY_MR)
{
mouse_x = 10;
mouse_r = true;
}
else if (keycode == KEY_ML)
{
mouse_x = -10;
mouse_l = true;
}
}
}
@ -719,9 +737,49 @@ void loop()
}
/* 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);
/* 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;
}