A free firmware developed by Mega_Mozg13 for make USB joystick controller using specific versions of Arduino/Teensy prototype boards, without need to assembly circuit boards or write computer code or deal with Arduino "sketches".
Solder tools and skill is need to assembly pins in some Arduino boards, as well to attach potentiometer, sensor, buttons as in any joystick.
Hardware needed: ~5$ Arduino PRO Micro (ATMEGA32U4) clone (or ~20$ Sparkfun/Teensy versions). Other supported boards linked bellow. Sample:
IMPORTANT - Arduino PRO MICRO with ATMEGA43u4, 16 MHZ, 5V.
Firmware : MMjoy2 - is loaded in Arduino board through a USB cable with MMJoy2 JoySetup software:
Buttons: Up to 128 - Notice that 128 buttons was possible in some boards only due pinout limitations, see in links bellow. Buttons connection require use of Diode Matrix or Shift Register circuits. Sample o DIY Shift Register board, by Debolesis (ED forum).
Encoder - up to 6, adjustable "click" times
Axis: Up to 8 axis using the internal 10 bits (1024 points) ADC or up to 8 axis using 12 bits (4096 position) using external ADC MCP3201, 3202, 3204, 3208 (the last digit indicates supported axis number)
Inputs (axis) in analog mode:
Conventional potentiometer, Linear type (B code), 1k to 100k, ideally use 10k.
HALL sensor: Radiometric linear, example Honeywell SS495A1, Allegro A1324
Inputs in digital mode:
TLE5010/5011, KMA200, KMZ60 + MCP3202 magnetic resistence sensors.
- "Shift" (mode) function, allow a physical button press a virtual button if "shift" are ON. - Compatibility with shift registers used in F-22 PRO, Cougar, Warthog and Cobra M-5 grips, making use this grips "plug-and-play". - "Joystick" name, VID, PID defined be user as desired, allowing use several MMjoy2 in the same computer.
If you want configure MMJoy as "2 axis and 1(or 0) button joystick" you can.
Update December 2015:
Firmware has support for up to 128 buttons + 10 axis inputs (2 axis reserved for mouse emulation, Windows Game Controllers see up to 8 axis), number of buttons use depend on Arduino board number of pins available. Possibility to use for joystick: 128 buttons + 2 HAT's (8 buttons) + 8 axis Possibility to use for mouse emulation: 3 buttons + 2 axis Possibility to use for keyboard emulation: 12 buttons (or 15 without "mouse")
To maximize the MCU (Arduino board) pins use:
For axis - MCP3208 external ADC, what allow use 8 channel 12 bit (4096 poins of resolution), and free 4 pins on Arduino and allow 8 analog axis inputs. For buttons - shift register IC 74HC165 or CD 4021B (this free 3 pins on Arduino and allow UNLIMITED button sources chaining one Shift Register IC in another, each manage 8 buttons)
Compatible Arduino boards - should use ATMEGA3244, ST90USB646, ST90USB1286 m/c (16 MHZ, 5V):
Flash the firmware in the Arduino don't create a ready to use josytick controller, but a blank template with 0 axis, 0 buttons:
For you customize like your needs defining number of axes: 0 to 8 axes, number of buttons: 0 do 128 buttons, joystick name, VID/PID... use MMJoySetup program, filing the options and after "Save sets to Device". ===============================================================================================================
WARNING (02/20/2017): Is know that MMJoySetup - the firmware flash, configuration utility - don't run in Windows in Chinese language, and virtual machine running English Windows don't help - the COM port is not seem. In that cases is need a computer/laptop running a Windows in English, German or Russian for run MMjoySetup.
Original topic about MMjoy -now obsolete:
What is MMJoy?
A new firmware developed by MEGA_Mozg, for the old (2004) Mindaugas/Meandog project MJoy (DIY USB Controller based on ATMEL mc), that besides original Mjoy8 or Mjoy16 board works on "developer� METABOARD, AVR_USB_MEGA16 and Arduino based Teensy 2.0 and Leonardo PRO Micro (Chinese clones cost ~5$ in eBay).
Is a configurable joystick firmware, after write MMJoy firmware on your board (require USB ISP programmer cable), this is recognized by Windows as USB HID device, but not as �joystick�, because since the firmware is configurable, are you that define the �joystick" parameters, to this use the program “Configurator�, via standart USB cable:
MMJoy main features:
2 to 8 axis (10 bits= 1024 points of resolution with ATMEGA32u4 ADCand 12 bits= 4.096 points of resolution with external ADC) - Support for axis in digital mode with external ADC converter (MCP3201/MCP3202/MCP3204/MCP3208 and KMA200) - Axis inversion in firmware - Axis auto-calibration (optional) - Axis ZOOM mode (momentary � by button press - reduce axis response to improve precision) - Axis STOP mode (momentary � by button press � �freeze� axis response)
0 to 48 buttons in momentary or toggle mode (in Windows buttons after 32 need keymapper)
4 encoders (each encoder take 2 button position).
POV HAT (8 angles)
User defined �joystick� name with up to 10 characters. User defined VID and PID number � this allow use more than one MMjoy on same computer without conflict, set the MMjoy joystick to be seem by Windows first or after �COTS� joystick.
Code Google project page (In Russian, but easy readable with Google Translator).
Actually the cost of Teensy 2.0 or Leonardo PRO Micro assembled boards make almost senseless DIY cards, but since different world regions have restrictions to import (here import fees double prices) is easy to do.
EDIT - What "hardware" is need to start?
A Teensy 2.0 (Teensy 2.0++ firmware WiP, see bellow) or Leonardo Pro Micro board. PCI pins for connection (optional). A USBASP USBISP AVR Programmer cable to transfer the firmware from PC/Laptop.
Sample: DIY Mjoy16 (ATMEGA16-16PU) that I build in 2008 and now re-write with MMJoy firmware.