This looks cool, however can someone with some electronics know-how explain to me why the connections on most, if not all the keys are crossed? They don't look like insulated wires, though I could be wrong.
Would Numpy be of use? Haven't looked at the source yet, but for a keyboard, 4 ms per matrix would be noticeably laggy, especially if you add debouncing (is that even a thing in keyboards?)
I read it first as 4ms per row, but yeah 4ms per scan wouldn't be too bad. There is of course additional time taken for communication etc, which might take another 4-10ms, which could make it almost a frame behind. Not terrible still.
Nice, if I made it I would replace the capslock with control and "~" with escape. Make the least used keys require combinations, not the often used ones.
I use Caps Lock for both Ctrl and Esc, wouldn't have it any other way. Shift keys are also open/closing parens, holding down the tilde turns the "yuihjknm," section to a numpad, holding down Tab turns jkl; to {}[], etc.
Oh, they're all hold/tap. Hold CapsLock to get Ctrl, tap to get Esc. Similarly with the shifts, hold to get shift, tap to get ( on left and ) on right. Tab is the same way, hold down tab to transform the keys.
This is nice, we need more such open-source, affordable keyboard designs and components; Especially for accessibility keyboards[1] as their costs are exorbitant.
Great job! I've not seen python-based keyboard firmware before, I'm impressed that it's fast enough to run something like a keyboard.
Without detracting from the code in the post, I recommend that anyone wanting to make and program their own keyboard should take a look at QMK, a widely supported keyboard firmware project that is FOSS: https://qmk.fm/
This implementation runs with a very different VM that can fit within 256k of code space and 16k of RAM.
So, while obviously you cannot expect anywhere near C level of perfs, this is way lighter than CPython.
The advantage is that you get the ease of Python to program your board, including the clean terce language, the memory management and the rich data structures. You can even have a live shell on some embeded hardwares! The whole dev process is so simple: code, copy your module, run.
Of course, some features of CPython are not available.
28 comments
[ 2.6 ms ] story [ 67.5 ms ] threadhttps://en.wikipedia.org/wiki/Magnet_wire
The insulation melts away where it comes in contact with hot solder, so it's very easy to work with for hand-wiring projects.
The controller is running CircuitPython which is a fork of MicroPython - a tiny re-implementation Python for microcontrollers.
The hardware includes a QSPI flash which presents as an USB storage that stored Python source code, and you can modify Python directly.
BTW, It provides a new way to validate your hardware product ideas quickly.
I've wanted to hardwire a keyboard, but a full-size one seems pretty intimidating.
Very handy when programming.
[1]https://needgap.com/problems/96-one-hand-keyboard-keyboard-a...
Without detracting from the code in the post, I recommend that anyone wanting to make and program their own keyboard should take a look at QMK, a widely supported keyboard firmware project that is FOSS: https://qmk.fm/
- why python?
- isn't is slow?
Remember that Python is a language spec, there are several implementations.
This project uses a particular implementation called CircuitPython ( https://en.wikipedia.org/wiki/CircuitPython), a derivative project from MicroPython ( https://fr.wikipedia.org/wiki/MicroPython), by the people at AdaFruit.
This implementation runs with a very different VM that can fit within 256k of code space and 16k of RAM.
So, while obviously you cannot expect anywhere near C level of perfs, this is way lighter than CPython.
The advantage is that you get the ease of Python to program your board, including the clean terce language, the memory management and the rich data structures. You can even have a live shell on some embeded hardwares! The whole dev process is so simple: code, copy your module, run.
Of course, some features of CPython are not available.