Dalius's blog

Monday, January 1, 2024

Keyboard with joysticks (part 7): joycon joystick

Previous part: Part six

Here I have received 5 points FPC connector and gave Joycon joystick another chance. Connected everything and it is not working again…

Somehow I figured out that I should try connecting it upside down, and it worked without soldering. I had no idea that it is important how you connect Joycon’s connector. Googled images “Joycon joystick PCB” and people are doing it both ways - so I still can’t say 100% that side is important. However, switches from two different sellers work only if they are connected not the way I have expected initially. Here is how it looks like without any soldering (and it works):

Keyboard

Here is where I have bought 5p FPC, but IMHO 6p (or even larger) should work:

https://www.aliexpress.com/item/1005004738019557.html?spm=a2g0o.order_list.order_list_main.5.64b61802v2OQkT

Now I can solder joystick to keyboard and experiment with its position. Initially I have tried something like this (note: I am simply gluing joystick to keyboard). However, this position felt really uncomfortable:

Keyboard

Next I have tried to do something like this:

Keyboard

Next problem, keyboard is not sticky enough on the table and using joystick is not comfortable as it moves keyboard itself. One way to solve this is to keep keyboard in place with one finger and manipulate it with another. E.g. like this:

Keyboard

While this is working and you can even use different fingers to work with joystick (index or thumb), but this requires moving your hand more than necessary. Alternatively I have key that is dedicated to mouse layer and luckily for me it is in quite good position. Now I can keep keyboard in place by holding mouse layer button like this:

Keyboard

Well, I will use it for some time and see if it works at all. Initial feeling that holding keyboard to use joystick is not optimal and cirque trackpad is much better option (like in Dilemma keyboard), but let’s experiment with this.

Hardware details

Here is axis positions for one of joycon switches I have when in stationary position:

  • X: 424 - 464

  • Y: 468 - 500

Min values:

  • X: 104

  • Y: 219

Max values:

  • X: 814

  • Y: 847

This is illustration how unreliable joysticks are. Therefore, this setting is really useful:

#define ANALOG_JOYSTICK_AUTO_AXIS

Software details

Here are other settings I am using. Just for run I have decided to use linear weights and it works as good as other options. I have only cutoff first 15% because as you might see from values above we have about 10% of values in dead zone.

#define ANALOG_JOYSTICK_WEIGHTS {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100}

I have decreased ANALOG_JOYSTICK_SPEED_REGULATOR value as default of 20 was too slow.

#define ANALOG_JOYSTICK_SPEED_REGULATOR 15

Lastly I am using this. I hope this one is useful:

#define ANALOG_JOYSTICK_CUTOFF

Some of the settings are available only in QMK dev branch, but eventually they will end up in master branch.

What’s next?

I will try to use joycon joystick now for some time and look what works. What I can say already that it feels better than PSP 2000. Is that enough to replace the mouse? I don’t know yet.