I need to do a little cleaning up of the code, but if you want a copy just ask. Happy to share.
Here's the usual video showing it working.
As promised now that I've tidied up the cdoe a bit here it is.
Update: 6 May 2012: Link to Code
Update 8 May 2012 - Added Breadboard Layout using Fritzing