All Projects → Chris-Johnston → Binarykeyboard

Chris-Johnston / Binarykeyboard

Licence: mit
A keyboard with two buttons that types in binary.

Projects that are alternatives of or similar to Binarykeyboard

Arduinomenu
Arduino generic menu/interactivity system
Stars: ✭ 520 (+268.79%)
Mutual labels:  arduino, keyboard
Esp32 Ble Keyboard
Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible)
Stars: ✭ 533 (+278.01%)
Mutual labels:  arduino, keyboard
Rubber Ducky Library For Arduino
An Arduino library that allows you to use a cheap Arduino (Leonardo) as a Rubber Ducky
Stars: ✭ 25 (-82.27%)
Mutual labels:  arduino, keyboard
Ergodox Layout
algernon's ErgoDox EZ layout
Stars: ✭ 135 (-4.26%)
Mutual labels:  keyboard
Arduino Timer
Non-blocking library for delaying function calls
Stars: ✭ 133 (-5.67%)
Mutual labels:  arduino
Keyleds
Logitech Keyboard animation for Linux — G410, G513, G610, G810, G910, GPro
Stars: ✭ 137 (-2.84%)
Mutual labels:  keyboard
Arduino Lorawan
User-friendly library for using arduino-lmic with The Things Network and other LoRaWAN™ networks
Stars: ✭ 140 (-0.71%)
Mutual labels:  arduino
Simplecli
Command Line Interface Library for Arduino
Stars: ✭ 135 (-4.26%)
Mutual labels:  arduino
Binch
A light ELF binary patch tool in python urwid
Stars: ✭ 139 (-1.42%)
Mutual labels:  binary
Arduino
Arduino electronics hacking
Stars: ✭ 137 (-2.84%)
Mutual labels:  arduino
Arduino Canhacker
CanHacker (lawicel) CAN adapter on Arduino + MCP2515
Stars: ✭ 136 (-3.55%)
Mutual labels:  arduino
Rotaryencoder
RotaryEncoder Arduino Library
Stars: ✭ 134 (-4.96%)
Mutual labels:  arduino
Openfpgaduino
All open source file and project for OpenFPGAduino project
Stars: ✭ 137 (-2.84%)
Mutual labels:  arduino
Mycontroller V1 Legacy
The Open Source Controller
Stars: ✭ 135 (-4.26%)
Mutual labels:  arduino
Keyboardstateevents
LiveData notification when keyboard opens or closes, plus some handy extension functions
Stars: ✭ 140 (-0.71%)
Mutual labels:  keyboard
Mousetrap
Simple library for handling keyboard shortcuts in Javascript
Stars: ✭ 10,937 (+7656.74%)
Mutual labels:  keyboard
Blinker Doc
blinker中文文档
Stars: ✭ 139 (-1.42%)
Mutual labels:  arduino
Towl
Digistump Oak - Telemetry over Opportunistic WiFi Links (ESP8266)
Stars: ✭ 137 (-2.84%)
Mutual labels:  arduino
Irremoteesp8266
Infrared remote library for ESP8266/ESP32: send and receive infrared signals with multiple protocols. Based on: https://github.com/shirriff/Arduino-IRremote/
Stars: ✭ 1,964 (+1292.91%)
Mutual labels:  arduino
Rf24
OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices
Stars: ✭ 1,813 (+1185.82%)
Mutual labels:  arduino

BinaryKeyboard

A two-button backlit mechanical keyboard that types ASCII values, one bit at a time.

Photos

Photo of Binary Keyboard Photo of Screen Top Down Photo

GIFS

Mode switching and typing backspace

Typing the backspace character, followed by switching between modes.

Demonstrating left to right input

Demonstrating left to right input.

Showing off animations in updated alternate mode

New animations added to '1/0' mode. (Still working on a name for that).

Sample input using phone

Demonstrating compatibility with USB OTG.

Boot up sequence

Boot up sequence.

Normal use

Demonstrating right to left input.

Switching modes

Demonstrating switching between typing modes.

Fancy backlighting

Close-up of the blue led backlit keys.

Technical Info

Schematic

Image of Schematic

Components

Arduino Library Requirements

These libraries are used to drive the SSD1306 OLED display.

Eagle Schematic Details

Because I could not locate a part to represent the SSD1306 OLED Display, I created my own. This can be found in the CSJ Library file for Eagle. A word of warning, this was my first time using Eagle. The part works, but could be improved.

Uses c0z3n/cherrymx-eagle library as well.

Usage

Each byte can either be typed from most significant bit to least significant bit (left to right), or least significant bit to most significant bit (right to left). This is configured before compiling and uploading to the board. After all 8 bits have been entered, it will type out the ASCII value equivalent of that binary value. The Pro Micro has USB HID support, which means it acts just like any other keyboard.

If both keys are held down, the keyboard will switch to "1/0 mode" / "single button press mode" (I'm bad at names). In this mode, each key will represent a '1' or a '0' just like on a traditional keyboard, no binary involved.

Arduino Problems

Initially I was going to use a DigiStump board for this, but I found issues with not having enough memory to work with after importing libraries and not enough I/O. I'm using an Arduino Pro Micro knockoff. The reason that there is electrical tape covering it is because I found that shorting the contacts with a finger would cause it to stop working. I'm still not really sure why.

Keyboard Class Limitations

This project relies on the Arduino Keyboard library to handle all USB HID support. It works great for printing standard characters and most operations, however, a downside of using this means that not all ASCII values are supported. Most of the values below 0x20 are not actually supported.

User dtwilliamson added a feature that repurposes these values as control commands. Here is a list of some control key commands.

The functionality of Backspace, Tab, and Enter is still preserved by setting HID_MODE to true.

Binary HID_MODE false HID_MODE true
00000001 L_CTRL + A L_CTRL + A
00000010 L_CTRL + B L_CTRL + B
00001000 L_CTRL + H Backspace
00001001 L_CTRL + I Tab
00001010 L_CTRL + J Enter
00100000 (whitespace) (whitespace)
00100001 ! !
01100001 a a
01000001 A A

Note that CTRL+H, CTRL+I, and CTRL+J function the same in a Unix command line as the keys do. Up to you which setting to use. HID_MODE true works just fine in Windows and the GNOME desktop environment.

Contribution and Modifications

Please feel free to fork this project for your own purposes. If you build one, I would love to see it!

If you have suggestions/improvements/feedback/bug reports/etc., submitting a pull request or an issue through GitHub is the best way to contribute.

Acknowledgments

Special thanks goes to everyone in the UWB Makerspace that helped make this possible.

Pixel art for screen animations by @Omrii_ https://github.com/OmriN7.

Please see the Binary Keyboard contributors page for a list of contributors. Many thanks to each of you for your support!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].