Hi,
I recently decided that I wanted a wired pendant for my CNC router (I prefer wired to wireless), but did not have enough spare IO left on my AXBB to wire one up directly. Having had bad experiences with various USB HID type pendants in the past (and not having been able to get any support when they've had issues), I decided to roll my own - That way, any problems would be entirely my own fault!
Rather than design and build the physical pendant myself, I decided to use a fairly common Chinese pendant (you've probably seen one at some point) which just contains the axis/step select switches, an E-Stop and encoder wheel - No intelligence, just a simple multi-core cable interface. This is connected to an Arduino Nano which keeps track of encoder wheel movements and polls the E-Stop and axis/step selection switches. The interface with UCCNC is achieved via the Nano's serial-over-USB interface and a custom UCCNC plugin.
Full details can be found on GitHub (https://github.com/mattbucknall/mpg-nano). All Arduino firmware and plugin source code is published under the MIT license. I'm posting this message here just in case the project information is of use to anyone. The plugin source code is a bit scruffy, because I don't really do C#, but it works well enough.
The testing I have done with my CNC router has gone well so far. If the encoder wheel is turned really fast (deliberately stupidly fast), the Arduino occasionally drops a couple of counts, but I've not found this to be of any consequence in practice - I use UCCNC's readouts to keep track of where I'm moving the machine, not the graduations on the encoder wheel. In any case, there is never a need to turn the wheel at such a silly speed during normal use.
Matt.