My first post about keyboards introduced the idea of Graph Theory applied to keyboard wiring. I have since used the girth 8 Tutte-Coxeter Graph to build a 6KRO keyboard (the Gamma Omega TC36K), and several girth 6 graphs to build 4KRO keyboards (see table of girth 6 graphs for keyboards in this recent post). But what about other kinds of switches like 3-way jog dials (up/down/push) or 5-way directional buttons (up/down/left/right/push)?
All the Graph Theory based keyboard designs I am aware of use simple mechanical switches, which equate to edges in the bipartite graph (between scanning row and scanning column vertices). There are more interesting switches out there like 3-way jog dials (up/down/push) or 5-way directional buttons (up/down/left/right/push), which electronically are not just a set of fully independent switches. They usually have a common connection, so these would be graph edges from the same vertex in the connectivity graph. Also, there are physical restrictions - like you can't press up and down at the same time. This page has some great data on navigation switches, and 3D files for caps etc too. Note some like the Knitter-Switch TSSJ 55 (which looks a bit like a tiny D-pad) is just five small separate push switches, with ten connections.
The 3-way jog dials would be easy to use in a diode-free Graph Theory keyboard - they just need to use any vertex with at least 3 edges (degree three), and most of the graphs you might consider meet that requirement. Essentially it could be treated in the same way that I treated columns of three keys when allocating the sparse scanning matrix to the physical PCB wiring. That doesn't take advantage of the fact two of these actions are mutually exclusive though.
Looking at the Alps 4-direction Type with Center-push Function (Surface Mount) SKRH Series (pictured above), the centre push action is independent of the 4-way directional part which can only connect one of up/down/left/right at a time - but all five actions share the same common connection. The Alps 8-directional Stick Switch (with Center-push Function) RKJXM Series is similar, but supports diagonal inputs meaning you can for example close up and left (and the central push) all at the same time (just not up/down, and not left/right). To use either of these switches, the graph would need at least one vertex with five edges (degree 5 or more), but the graphs I have used thus far had at most degree 4.
Here's the planned wiring for my latest design, the Bivvy16D, a 16-key reversible PCB (each one half of a 32-key split keyboard) with a 5-way directional button (up/down/left/right/push drawn as ⬆️/⬇️/⬅️/➡️/⏺️) using 17 GPIOs in a ring of 16 vertices (giving 16 outer edges for the 16 normal switches) with the 17th vertex used as the common connection of the 5-way button:
At face value this is girth 4 (meaning only 2KRO which isn't really useful on a small keyboard), but the only length 4 loops use both up and down, or both left and right - which are not possible. That means with the physical constraints of the switch in mind, it is effectively girth 6 and 4KRO (but only when the two of the 5-way actions are used together, here ⬆️/⏺️, ➡️/⏺️, or ⬇️/⬅️ if that is possible). And if the 5-way switch isn't used at all, the simple ring has girth 16 meaning 14KRO. So for the ordinary keys this is not quite as good as full NKRO that direct wiring would give (all simultaneous key presses can be determined uniquely), but is pretty close.
No comments:
Post a Comment