I just made the coolest keyboard prototype

I wasn't sure where to put this post so I put it here. Mods, maybe a "prototypes" section under "project discussion and showcase" is warranted. Feel free to move the post if you don't like where it is.

I posted this because I just had to share it.

This keyboard is a prototype of something that will be attached to DataSleeve, and it uses a 12-key matrix keypad and a rotary encoder paired with an Arduino Micro to make complex alphanumerical inputs on a computer.

In other words, I can print the entire alphabet, and every digit, and every punctuation symbol with twelve buttons, WITHOUT making any weird complex button combinations.

It works like this:

The keypad has a specific keymap that it responds to, and pressing a key tells the software which button you've pressed as a number 1-12. This data is stored in an int called "key". The rotary encoder increments an int called "counter" whenever it moves one notch clockwise, and it decrements "counter" whenever it moves counterclockwise. Additional code keeps "counter" between 1 and 8.

The code has a 2D int array, which has 12 arrays, each with 8 elements.

Can you see where I'm going with this?

The code has a line- Keyboard.write(array1[key][counter]);

So if I pressed button 2, and the rotary encoder was set to 1, that line would mean Keyboard.write(array1[2][1]);

But what does that location in the array mean? Well, the array is filled with ASCII values (and some reference variables I put on the 0 values to make my life easier). So if we continue with the [2][1] value, that would return as "98". Which the Arduino would print to your keyboard, and "b" would appear on your screen. If I incremented the encoder one and pressed the same button, it would print "n".

How cool is that?

It does require setup, I have to write the 2D array to correspond properly. If I wanted to, that same location could return "." or "8" or "p". But that doesn't make sense.

Thoughts can be shared in the comments. I'm sure I'm not the first one to think of this idea, but it works remarkably well and I've never seen it before, so here it is for the community.

Clumsy to use I would say

Basically you have 8 keypads, the current one of which is selected using the rotary encoder. How does the user know which keypad is currently in use and what keys it will generate ?

A status LED. The keycaps have the outputs of 6 of the 8 modes printed on them. The other 2 modes are things like logout and the section sign.

It kind of has to be clumsy because it's wearable, and I couldn't be sauntering around with a full keyboard on my arm and still have room for everything else. Don't even get me started on the mini wireless keyboards...

EDIT - It's also less clumsy and easier to learn than, say, a Twiddler, if slower.

What size is this keypad/rotary encoder/status LED (only 1 ?)/Arduino Micro combination ?

...size? I couldn't tell you exactly. Everything fits on a 140x80mm PCB, but that board both does other things and is specifically designed to fit on my arm.

EDIT - It could likely be miniaturized, but I'm not a master PCB designer.

It sounds rather like you could do all the data entry on a mobile 'phone and send it to an Arduino via Bluetooth for processing

I'm not allowed to have my phone in school, which is one of the major reasons I'm doing this project. Also, having to take your keyboard out of your pocket/having a hand always occupied is something I wanted to avoid (looking at the Twiddler again).

EDIT - The phone thing led to me looking into mobile data for Pis but that's outside the scope of this project.

  • Take the SIM card out of your 'phone and it is no longer a 'phone.

  • don't put it in your pocket. Wear it as you would your keypad

  • The "'phone" makes a good input/output device with which you are already familiar from using it for texts

As a comparison try typing "the quick brown fox jumped over the lazy dog" on the 'phone and on your keypad device

Your keypad is an interesting input device but not very practical

I think my school would beg to differ. I'm also way to far into this project to change over to something else.

Way back when dinosaurs roamed the earth I spent 3 months developing my own data structure. When I finished it and showed it to my mentor he congratulated me on reinventing the radix tree. If I'd asked for guidance, like you already have, I would have realized that it was a fruitless project and moved on. Though I did enjoy the experience.

I'll find out if it's fruitless once it's built.

The alternative was this, training a TensorFlow module to recognize air writing and turn them into keyboard inputs. Absolutely not.

*One alternative

Trust me, I thought of pretty much everything.

"A closed mind is like a closed book just a block of wood"
Chinese Proverb

Be open to other ideas, there is almost always another way.

If you have other suggestions you can throw them at me, but I will be surprised if there's one that makes sense to implement.

"Whether you think you can or you can't, you're right."

So you don't have any suggestions?

A $10 touchscreen and just about any matrix layout that you choose.
4 rows of 7 keys and 1 row of 7 select keys would yield 196 unique key possibilities.

Ah, but the onboard computer has a touchscreen with an onscreen keyboard. The auxiliary keyboard is for interfacing with other computers via BT/the command line.

I've no other help than what's already been offered.
It sounds clunky and difficult to use as the user has no idea what keys they are pressing unless they memorize them.