Custom HID buttons and Axis for windows

I am looking to create a custom control panel for my desk using a combanation of arduino and a fwe MCP3008 ADCs. The ADCs have 8 analog inputs each and only require 1 unique pin on the arduino each so i can have about 10-15 of these chips for a single arduino (80 - 120 inputs). each input will be connected to a button or axis device.

I am looking for a way to add custom buttons from arduino into windows. Example, on xbox there are A, B, X, Y, Lt, RT, LB, RB, Start, Back, LY axis, LX axis, Ls, Ry axis, Rx axis and Rs. on my x52 there are about 30 buttons with names that start with X52***. Im looking for a way to do the same as that but without takeing space from any device i currently own.

example: ADC1 ch0 button would register in windows as ADAA and ADC5 ch3 could be ADEC (AD prefix, chip E channel C)

has anyone tried this. i dont want to simply use the keyboard keys as i dont like them overrightig for different games and such.

Note: although i concider this an arduino project it might be something i have to program in windows. I can program in python but c and c++ i find a little difficult for windows applications so would prefer not to use them.

I'm not a HID expert. I'd think that you have to create a special HID that is not treated as a keyboard or mouse. Dunno whether a special Windows driver is required for such a distinct device. Perhaps it can register as kind of a graphics tablet. IMO definitely required is a Windows program that connects to the device and processes its input.

It can be done by sending serial command(s) from the arduino to your custom created windows program (C++, VisualBasic, etc.); I've interfaced the arduino to my favorite PC games via custom software. The real question - does the PC game have a SDK to interface your custom created software? If so, it's calm sailing.

The simple way is just to use standard keyboard shortcuts that are very unlikely to be used by any application. Ctrl + Alt + Shift + {any key} are surely free because they would be such a pain to use manually.

Mouse and keyboard are shared devices in every OS, i.e. keyboard input is sent to the window having focus, and mouse messages are sent to the window under the mouse cursor. Special key combinations can be handled by the OS, like CTRL+ALT+DEL, or a program hooked into keyboard input, or they can be ignored (discarded) by the focused window.

That's why the device should be distinct from other devices, so that an application can connect to it exclusively. With the current serial driver every COM port has its unique number, so that each can be attached to a different application. As suggested by JMeller the input codes can be sent over the standard Serial USB connection, so that they are not misinterpreted and/or routed in the typical OS way.

Thanks for the replies. My problem is i wouldnt know how to emulate certian parts of the code in c++. there will be multiple buttons and Axis. the axis part is why i cant just use keyboard shortcuts. i have been looking for methods to use in c++ and the few examples i have found are based on the SendKeys() function, however i have found no refence that shows non keyboard keys being used. another alternative i have seen is freePIE which can emulate joysticks and includes axis support although how far this support goes i havnt seen yet.

i was hoping for some arduino specific control for axis control i have seen a joystick axample but it looked to be single axis and based on the same input codes as an xbox 360 controller or ps3 controler which is what im trying to avoid as i alread have thos bound to specific inputs.

If you use an Arduino Leonardo or Micro or PJRC Teensy 2.0 or Teensy++ 2.0 then you can program the USB connection as HID. Your Windoze will see it as a game controller. And yes, you can make it do stick, keys and mouse together as HID.

PJRC was first using AVR/USB chips and then Arduino Leonardo came out and used the PJRC libraries. PJRC may be the best site for docs on the whole HID-board thing.

GoForSmoke: Your Windoze will see it as a game controller. And yes, you can make it do stick, keys and mouse together as HID.

i know i can use mouse / keyboard / gamepad emulation with the pro micro the problem is capacity. I am wanting to create non standard key inputs, en example: if i plug both my x52 and xbox 360 controller in i can use all 7 axis (x52 X, Y with xbox LS X, Y RS X, Y and x52 throttol) along with 16 xbox buttons and 25 x52 buttons without any conflics and without using any keyboard keys. I am trying to do the same with the arduino by hooking up a bunch of buttons and thumbsticks and having them as a unique HID device with specially defined keys with a naming profile similar to ADA1 ADB1 AD1 etc. i had a look through the libaries you mentioned for the PJRC and nothing seems to stand out other than a example of a really simplistic joystick.

Saitek has drivers for the X52. I have one from 2002. I expect that the X52 output tailors to the X52 driver and same for the xbox.

If you want to create a custom application, Raw HID is simple way to send 64 byte packets between your code on the Teensy and your application on the PC or Mac.

HID works automatically with built-in drivers in Linux, Mac OS X and Windows, so users will not need to load any drivers. Your application can detect your Teensy running your customized Raw HID, so to the user everything "just works" automatically.

You can send up to 1000 packets per second in each direction. The USB host controller will reserve USB bandwidth. You are not required send all packets, but if you do, you are guaranteed to be able to transmit the number of packets per second your code specifies, even when other USB devices are active.

How did you miss that?