From 2ab8d0a68aa667c8fc8fec1f750928b3fdf6f679 Mon Sep 17 00:00:00 2001 From: mintey Date: Tue, 2 Mar 2021 22:47:32 +0200 Subject: [PATCH] some simple mouse acceleration --- smol_gkos.ino | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/smol_gkos.ino b/smol_gkos.ino index e13fa69..f3c8dd8 100644 --- a/smol_gkos.ino +++ b/smol_gkos.ino @@ -145,7 +145,13 @@ byte mouse_left = 0; byte mouse_right = 0; bool mouse_button = false; -const int mouse_scroll_sensitivity = 10; +const int num_mouse_samples = 10; +int current_mouse_sample = 0; +int mouse_movement_sample = 0; +float mouse_acceleration = 0.0f; +const float mouse_accel_factor = 0.7f; + +const int mouse_scroll_sensitivity = 6; int mouse_scroll_dist = 0; bool mouse_middle_pressed = false; bool mouse_scrolled = false; @@ -167,10 +173,9 @@ void setup() { pinMode(PIN_LED2, OUTPUT); pinMode(PIN_LED3, OUTPUT); - // poll trackball at 100Hz - trackball_timer.begin(trackball_isr, 1000); + // poll trackball at 10kHz + trackball_timer.begin(trackball_isr, 100); - Serial.begin(115200); Wire.begin(); } @@ -238,6 +243,7 @@ void loop() { if (!mouse_scrolled) Mouse.click(MOUSE_MIDDLE); mouse_middle_pressed = mouse_scrolled = false; + mouse_scroll_dist = 0; break; } } @@ -264,6 +270,15 @@ void loop() { int mouse_x = mouse_right - mouse_left; int mouse_y = mouse_down - mouse_up; + + mouse_movement_sample += abs(mouse_x) + abs(mouse_y); + current_mouse_sample++; + if (current_mouse_sample > num_mouse_samples) { + current_mouse_sample = 0; + mouse_acceleration = 1.0f + mouse_movement_sample * mouse_accel_factor; + mouse_movement_sample = 0; + } + if (mouse_middle_pressed) { mouse_scroll_dist += mouse_y; if (abs(mouse_scroll_dist) > mouse_scroll_sensitivity) { @@ -272,8 +287,7 @@ void loop() { mouse_scrolled = true; } } else { - Mouse.move(sign(mouse_x) * mouse_x * mouse_x, - sign(mouse_y) * mouse_y * mouse_y); + Mouse.move(mouse_x * mouse_acceleration, mouse_y * mouse_acceleration); } trackball_update = false;