Modular Multi-Input Macro Keypad Integrates Mouse And Joystick

An input device combining a joystick with several knnobs and buttons

While most computer users make do with just a keyboard and mouse, power users often have multiple additional input devices. Gamers use joysticks or dedicated mice, CAD engineers have specialized gadgets for manipulating 3D objects, while graphic designers might want programmable macro buttons to automate various tasks. [Sascha Nitsch] didn’t fancy cluttering his desk with a whole bunch of input devices and therefore decided to combine as many functions as possible into the CIMDIT: a Completely Insane Multi Device Input Thingy.

The main components making up the CIMDIT are a 3-axis joystick module, which can double as a 3D CAD mouse, and a set of buttons, knobs and sliders to enable various functions. One rotary encoder is used to choose an operating mode, while four others can be used as programmable inputs. A small OLED display shows which mode is currently selected, but can also be used to display notifications from various programs.

An Arduino Pro Micro provides a USB interface to a PC and reads out the various input units. The entire design is modular, so it can be customized to any desired combination of analog and digital inputs. [Sascha] made a neat 3D printed enclosure to hold the 3-axis module along with 26 buttons, five rotary encoders and one analog slider. KiCAD files for the PCBs and the FreeCAD source for the enclosure are available under an open-source license on [Sascha]’s Git repo.

The same thing applies to the software driving the CIMDIT, though adding functionality to it might turn out to be tricky: [Sascha] had to perform some serious code optimization to fit everything into the Arduino’s 32 kB of program flash. The Git repo also includes a convenient tool to create key mappings to be programmed into the controller, saving you from having to compose a binary file by hand.

Love macro keypads? Check out these cool examples with gesture detection, an e-ink display or simply beautiful wooden keys.

12 thoughts on “Modular Multi-Input Macro Keypad Integrates Mouse And Joystick

    1. Looking at the keyboard on this laptop (Panasonic CF-53, new in November 2013), the shiniest (thus most frequently used) keys are: E, R, T, S, D, F, G, H, C, V, B, N, M, Enter, CTRL, Logo, Space, RShift.

      So that’s 18 keys out of 88.

      In [1]: 18.0/88
      Out[1]: 0.20454545454545456

  1. Love it, though I feel it needs more linear slider, cup holder and perhaps a wrist rest on a rail along the front edge to be really classifiable as ‘Completely Insane’ – it just looks too sensible…

    Seriously though I think I would add 3-4 more linear slides into such a build if doing it for myself, and move the screen and rotary pots to above them – then you can display what each one is connected to – want volume control of various applications it can connect show and let you select the app each slider is controlling, want to scale something in x,y,z,all axis it can label which one is which, for the photo manipulation it can show rgb for colour selection and perhaps tool size/intensity/opacity etc.

    Its great having many uses for your HID, but its nice if it actively spells out not only the mode it is in but which stick/slider etc does what (something that catches me out with more odd uses of the steam controller sometimes).

  2. Hi,
    creator here.
    The design is modular, you can add up to 16 analog inputs (3 used by the joystick), so if you want to, you can have 13 sliders without code or hardware modifications. They are actually quite cheap. You need to create your own enclosure or modify the existing one.
    With some slight changes you can add even way more. There are 6 free I2C addresses for the 16 bit IO multiplexers, so you could build a 2^(16(pins)*6(devices)) =2^96 analog multiplexer to have more sliders than fit into a city, update rate and usability might suffer a bit ;)
    The keys are cheap mechanical keys (used in gaming keyboards), the tops are called “Transparent Keycaps Double-layer Keycaps” or similar. Can be found in chinese market places for cheap. Those are gray/whitish bottoms with a separate clear cover. Normally you can print out the label and put them under the cap. Often seen on Point-Of-Sales devices. If you find the right seller, also quite cheap.

    And since this is detected as a keyboard (and mouse and joystick) it probably can be used as a CNC controller in LinuxCNC directly. Just add the right mapping and probably one of the bigger rotary button knobs for better usage. Not sure if you can also use the joystick for driving around. Never used LinuxCNC, my CNC used a dedicated embedded controller (not built myself).

    If you add a i2c multiplexer or use OLED display with configurable addresses you can drive more screens. But you have to modify the drawing library, currently it needs 512 Bytes per screen. The device only has about 500 Bytes of memory left (out of those huge 2500 Bytes the chip has, no kilo, mega or giga here!). Also you need to store the images in the EEPROM (only 32kB or use a bigger one). You’ll have to stream it byte by byte from the EEPROM/serial port to the display. Keep in mind, that is a tiny micro controller, not a full PC. :)

    1. Great additional details, thanks.

      I didn’t know you could get normal key caps in double-layer transparent (I’d always assumed the industrial/commercial building type keys would be using some propriety mounting hardware so you had to get the replacements from them – seems to be a sadly rather common business model)

      Obviously meets the needs you designed it for, which is really the salient point, its what YOU wanted, doesn’t need to do anything for me and if I really want my own I should get on and damn well make one that fits what I want (or accept the limits of whichever devices I choose to replicate/buy).

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.