This is my first time posting in the Plover google group (and my first stenotype post ever).
First things first: I am a stenotype enthusiast? If you can even call me that. I find stenotype to be very interesting and I wish to learn it when I have more time (currently entering senior year high school, got an ACT coming up in a few days). I currently am typing on a Dvorak layout, and a USB keyboard that supports N-Key rollover.
When I found Plover, I felt a huge wave of relief. It gave me the possibility to type extremely fast with open software. However, I was quickly discouraged by price of keyboards and the lack of dedicated steno keyboards on the market today.
While I know that I do not need a dedicated steno keyboard to use, I know that if I make one myself (and/or post here), it'll motivate me to finish it and take up steno later on.
I know that currently, the stenoboard is in production and the stenosaurus will be coming up soon, but I decided that I wanted to make my own. Because I am no programmer, I decided to use and modify the stenoboard's firmware instead of programming from scratch myself.
Yes, I have very very little expertise with programming. However, I have help from my brother (mostly me asking him if something will work or not like I think it would to my logic).
So this is what I have done.
I have looked at the Stenoboard's PCB and made sense of how all the connections are wired together. (It's a 5x6 diode-switch matrix connected to pins 2-13 on the Arduino Leonardo)
NOTE: THIS NEXT SECTION INCLUDES CUSTOM MODIFICATIONS TO THE STENOBOARD FIRMWARE/HARDWARE
I know that the next part is mostly to do with my own irks personal urges, but I decided that I will use an Arduino Pro Micro instead of an Arduino Leonardo.
Why? I dislike the amount of unused stuff on the Leonardo. External power supply not needed, it's bigger than necessary, tons of unused pins, etc. Perhaps you can call me obsessed with optimization for both size and efficiency... I just had to.
So using a Pro Micro creates a few problems.
Instead of pins 2-13, the pro micro only has pins 2-10. After that the pins go to: 16, 14, 15, A0/18, A1...
I took a quick look inside the programming and I saw that to switch around the pins, all I needed to do was to change the numbers. Okay! That's done.
Now, the pins are routed 2-10 + 16, 14 and 15.
However, I realized another thing. Firstly, the LED pin is pin 3, whereas Column 5 goes to Pin 2. This is bizarre; it separates Column 5 from the rest of the columns. So I switched it around.
Lastly, when it's configured this way, Pin 9 is on the opposite side of the pins 10, 16, 14, 15 and A0... etc. This means that ONE Row pin has to jump across the board. Again, I was irked out at this and decided to move the pin to pin 10 and shift everything up one more.
So here is the end result:
LED pin: Pin 2 (originally Pin 3)
Column Pins: Pins 4-9 (originally Pin 2, 4-8)
Row Pins: 10, 16, 14, 15, 18/A0. (originally Pin 9-13)
The end result of this is that the Stenoboard Arduino Sketch SHOULD be able to run on an Arduino Pro Micro. Again, I do not have an arduino at the moment (and it would be my first foray into programming) so I cannot confirm if this will work or not.
I also added a reset button (advised from my brother). This just resets the RAM and stuff on the Arduino and boots it up again (does NOT reset flash memory, so the program is still on there). In case something strange happens.
It's very simple. Just connect a button between the Reset pin and Ground pin.
Additional features:
The Arduino interprets the columns and rows originally as this:
{'q', 'w', 'e', 'r', 't', ' '},
{'a', 's', 'd', 'f', 'g', ' '},
{'c', 'v', 'n', 'm', '3', ' '},
{'u', 'i', 'o', 'p', '[', ' '},
{'j', 'k', 'l', ';', '\'', ' '}
This is the matrix that it uses to tell what keys are being pressed down. You'll note that there are five empty spaces at the far right. The top two are used for the Fn1 and Fn2 (function 1 and function 2) keys on the Stenoboard.
Those buttons are (Row 0, Column 5) and (Row 1, Column 5).
What I found out was that the asterisks on the main/right hand board are mapped to the left hand board.
So I decided to add in separate letters to differentiate between left hand asterisk and right hand asterisk. The end result is this:
{'q', 'w', 'e', 'r', 't', ' '},
{'a', 's', 'd', 'f', 'g', ' '},
{'c', 'v', 'n', 'm', '3', ' '},
{'u', 'i', 'o', 'p', '[', 'y'},
{'j', 'k', 'l', ';', '\'', 'h'}
Notice that at the bottom two rows, Y and H are added (they are the qwerty equivalents of right hand asterisks).
Why did I do this? Well right now it's a dream but I think it would be wonderful to type on a stenoboard like one types on a full keyboard. How? By mapping this: Top button only = top row. Top + Bottom = home row. Bottom only = bottom row. Of course, right now it's a fanciful thought. However, I need to implement it in the hardware before it even has a chance to be able to do it in the software, so here it is.
This makes right hand asterisks different from left hand asterisks until interpreted by plover.
Additional changes I needed to make because of this: Gemini Protocol's asterisk needed to be expanded. It now looks like
if (currentChord[0][4] || currentChord[1][4] || currentChord[3][5] || currentChord[4][5]) {
instead of
if (currentChord[0][4] || currentChord[1][4]) {
The same thing applies to the TX Bolt protocol. This enables right hand asterisks to work with Gemini and TX Bolt as well.
This is pretty much where I've gotten so far with about 2 days of dedicated thought-work. There are a few additions that I want to make and will be listed below. This list contains things that I want that I don't know how to implement or just haven't gotten around to doing so, and includes everything above. Note that pretty much everything on this list is not required for the circuit to work.
1: Keyboard imitation. Of course this is going to be very complicated, but this is NOT a priority.
2: Fn2 key: I personally want this key to toggle Plover On/Off.*
3: An extension to #1, keyboard imitation in firmware-level Dvorak layout via mechanical switch. (Why? Well, if i'm going to use steno at school, I'm going to be carrying it around. I typically can't take the time to go and switch someone else's computer into Dvorak, nor can I really take the time to install Plover. So perhaps as a bizarre middle ground I can type dvorak on my stenoboard that can be quickly swapped in and out).
*I don't know how to do this. I can't toggle Plover on or off with any keystrokes inputted on my NKRO keyboard. It is NOT running on admin mode. I have a custom .json file that maps a keystroke to the {PLOVER:TOGGLE} command but it refuses to work. I also have other keystrokes mapped to Plover's Resume and Suspend commands but they do not work either. (I have tried when Plover is running or stopped (red/green P)).
Anyway, sorry for the incredibly lengthy post on my ventures into a custom stenoboard. I hope that with some luck, I can produce this dream board of mine. Currently I am in the process of acquiring a cheap Arduino Pro Micro (Yes, a cheap chinese knockoff version. My brother recommended it to me because it's much cheaper and according to him, the functionality was exactly the same. I'm having him guide me through what I need to do so I don't accidentally brick it.) Later on I plan to get some switches and assembling my product.
TL;DR version:
I looked at a stenoboard and was inspired to make my own but with a few changes.
Arduino Pro Micro instead of Leonardo
Shifted a bunch of pins around.
Added Right-hand asterisks (in firmware level, in NKRO, gemini and TX Bolt)
Personally want to: Add keyboard imitation, Fn2 key to toggle Plover.
I would much appreciate constructive criticism and feedback. I know that even though right now it is in very early and theoretical stages, I hope it can advance very far.
-Lenno Liu