How to make a binary mechanical keyboard

Originally published at:


Why isn’t the 0 and 1 labeled? What if you got confused and typed the opposite of what you meant to type, opening a gate way to hell?


Or end up spontaneously creating photoshopped pages of Dune?


Or a meme script.

Really anything other than learning Safe Cracking…


I like that the ergonomics of the case are as bad as every other aspect of this fine product.


Shouldn’t a binary keyboard only have one button?

Press button for 1, don’t press button for 0. Always sampling, because the clock signal comes from somewhere else. If you have control over sampling as well, the input isn’t strictly binary.


This is better than my version where I just took a regular keyboard and glued all the other keys.


Be careful how you use this…

1 Like

To make it compatible with both big and little Indian endian architectures?

ETA: fixed autocorrect induced typo


Three buttons is overkill, as stephen_schenck said.

Amateur radio and Western Telegram have used simplest binary ‘keyboard’ for over a century. It’s the telegraph key. If you need to get ‘fancy’ you can use an iambic, two-paddle keyer.


If the Universe exists, value is one.

If the Universe does not exist, value is zero.

Create and delete Universe as necessary.

In the words of computer scientist Donovan Philips Leitch:

“First there is a mountain, then there is no mountain, then there is …”


That is one thing I didn’t understand - how do you know when one letter ends and another begins? Is a slight pause enough?

You mean big and little endian.

Big and little endian just refer to the order of bytes in the address. In big endian, the most significant byte is in the lowest address in the block. In little endian, it is in the highest address.

1 Like

EE here. Yes it can, but then you have to precisely time the duration of the ones and zeros. It’s not like Morse where a dash is three dots long and that’s that. There can be any number of zeros followed by any number of ones and vice versa. It can be very hard to time that, especially when you factor in differences in the user’s button press speed and fluctuations thereof.

I would send a rising edge to represent 1 and a falling edge to represent 0 (cf., Manchester encoding). It’s much easier for a machine to read. In practice, that still may be tough on the user, so it would be easier to have one button for rising edges and another one for falling edges.

I am still not sure what we need the space button for, if we’re assuming everything is in 8-bit bytes. I suppose pressing the button before all 8 bits are received could serve as a reset.


For Morse code?

The letters of a word are separated by a space equal to three dots (one dash), and the words are separated by a space equal to seven dots.


This keyboard has three keys on it. I think the big one is the character separator.

I would make it work like a UART, wherein you press the key to send a START bit, then send the bits one by one with either pressed for 0 or not pressed for 1, then pause for a STOP bit. This requires very consistent bit timing to work, but there is no upper limit on the time before the next START bit.

1 Like

I would use Manchester encoding, with one button sending a falling edge and another button sending a rising edge, just to make it nice and clean. The space bar would actually be a reset button as opposed to a character separator.

1 Like

Yes, endian. Blame autocorrect. It was meant as a joke anyway.

The owner of that fine keyboard is even now rattling off an impassioned response to this article…

Any moment now…