I have tried to submit an improved Joystick Shield to Sparkfun to see if this design is worth to work with.
The main concept behind this shield is if a DIY minded developer have left without enough IO connections to finalize its gadget then the I2C protocol can help out using as minimum as two wire to do the job for example to a user input device.
This product is basically a joystick shield with the advantage of I2C two (or three if IRQ required) wire communication.
To be able to use I2C communication with analogue joystick and five buttons I’ve used an ATMEGA168 micro controller in I2C slave mode. The ATMEGA collects data
and optionally indicates to a master device if a change has happened.
The design has a software configured default I2C address which can be changed by I2C commands sent from the master device.
I’ve placed two jumper options on the PCB. One to choose the default or the programmed I2C address and the other is to choose if the interrupt option is needed. I chose not to place a reset button for the master Arduino board on the shield but instead use this button to restart the shield itself in case of any malfunction. On request the shield sends 3 Bytes of information containing the joystick X-Y positions and the actual state of the five buttons.
This product could be an enhanced replacement of the original joystick shield.