qmk / qmk_firmware

Open-source keyboard firmware for Atmel AVR and Arm USB families
https://qmk.fm
GNU General Public License v2.0
18.08k stars 38.86k forks source link

Rotary Encoders - Microsoft flight simulator - MSFS Heading, Speed, Altitude Control #23546

Closed Gatsidakos closed 1 week ago

Gatsidakos commented 5 months ago

Issue Description

Hello there,

I'm relatively new to this one but capable enough to understand and implement.

I purchased an Arduino Pro Micro and created a small panel to control my autopilot in MSFS. I have eleven keys and 4 Rotary Encoders (20 Pulses per full Rotation) on my panel.

My MSFS recognizes all the keys as an external mechanical keyboard but the only issue that I'm facing is with the Rotary Encoders Response. For example, When I'm trying to change the heading to 1 Degree right, I have to turn the Rotary Encoder multiple turns (Sometimes 40-60 turns for 1 degree).

Not sure if you have similar issues resolved. I will attach below my keymap and config:

Gatsidakos commented 5 months ago

config

ifndef CONFIG_H

define CONFIG_H

/ key matrix size /

define MATRIX_ROWS 3

define MATRIX_COLS 5

/ key matrix pins /

define MATRIX_ROW_PINS { B3, B2, B6 }

define MATRIX_COL_PINS { F4, F5, F6, F7, B1 }

/ COL2ROW or ROW2COL /

define DIODE_DIRECTION COL2ROW

/ Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap /

define LOCKING_SUPPORT_ENABLE

/ Locking resynchronize hack /

define LOCKING_RESYNC_ENABLE

/ key combination for command /

define IS_COMMAND() (

keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) )

define ENCODERS_PAD_A { D1, D4, D7, B4 }

define ENCODERS_PAD_B { D0, C6, E6, B5 }

define ENCODER_RESOLUTION 1

define ENCODER_DEFAULT_POS 0x3

define ENCODER_MAP_KEY_DELAY 100000000

endif

Gatsidakos commented 5 months ago

Keymap

include "kb.h"

define HALF_STEP

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

KEYMAP( KC_Z, LCTL(KC_S), LCTL(KC_H), LCTL(KC_U), LCTL(KC_V), KC_F2, KC_P1, KC_P3, KC_P9, KC_P7, KC_F1, KC_P2, KC_P4, KC_P6, KC_P8),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),

KEYMAP( KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS) };

void matrix_init_user(void) { }

void matrix_scan_user(void) { }

bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; }

bool encoder_update_user(uint8_t index, bool clockwise) { if (index == 0) { / First encoder / if (clockwise) { tap_code(KC_P1); } else { tap_code(KC_P2); } } else if (index == 1) { / Second encoder / if (clockwise) { tap_code(KC_P3); } else { tap_code(KC_P4); } } else if (index == 2) { / Third encoder / if (clockwise) { tap_code(KC_P5); } else { tap_code(KC_P6); } } else if (index == 3) { / Fourth encoder / if (clockwise) { tap_code(KC_P7); } else { tap_code(KC_P8); } } return false; }

ykeisuke commented 3 months ago

did you try overwrite encoder_driver_task function? https://github.com/qmk/qmk_firmware/blob/dafc46f1d11134bee65a4b21a404f8e79d7b8402/drivers/encoder/encoder_quadrature.c#L209

Gatsidakos commented 3 months ago

I ended up using mobiflight and avoid the headaches of programmingBest RegardsGeorge Atsidakos, P.EngOn Jun 19, 2024, at 00:43, Y.KEISUKE @.***> wrote: did you try overwrite encoder_driver_task function? https://github.com/qmk/qmk_firmware/blob/dafc46f1d11134bee65a4b21a404f8e79d7b8402/drivers/encoder/encoder_quadrature.c#L209

—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>

github-actions[bot] commented 1 week ago

This issue has been automatically marked as stale because it has not had activity in the last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity occurs. For maintainers: Please label with bug, in progress, on hold, discussion or to do to prevent the issue from being re-flagged.