Desk Clock/Helper


August 30, 2013
I've since modified this to use an Arduino as the controller, instead of PICTroll. The LCD and Button boards remain the same, but they are wired to the pins of an Arduino, which is connected to the computer via USB. The temperature controller hasn't be re-added to the system, but an IR receiver has been added instead. I'm using the wonderful IRremote library written by Ken Shirriff available at In future, I will probably make a proper shield that connects to the existing boards, or possibly replace the LCD and button boards entirely.

March 29, 2009
This is a desk clock device that uses OSC to communicate with a computer. It displays the time and can act as an additional I/O device to the computer. Currently, it is set up to control the xmms2 media player running on the computer as well as display the current song name. It also displays the current time, which is synced with the computer at power-on, and it displays the current temperature, as read from a DS18B20 temperature sensor,


There are 4 seperate boards: a controller board, an RS232 interface board, an 8-button input board, and a display board. The controller board is a very simple board with a surface mount PIC16F877A, a basic voltage regulator power supply (along with a 9V 800mA wall adapter from radio shack), an ICSP header, and a number of I/O headers. The RS232 board plugs directly into the controller board and uses the PIC's internal USART to communicate with a computer. I made it a seperate board so that I could change the electrical interface in the future. The display board has 4 LEDs and a 16x2 character LCD module.

Controller and RS232 Schematics
Display Board Schematics
Buttons Board Schematics


Git repository: git://

Old Code

clock-2009-03-29.tar.gzThis is the code that runs on the PIC. It is written in C and compiled using SDCC.
osc-serial-server.cThis is a simple program that receives UDP messages and forwards them directly onto the serial port. Currently it's hardcoded to send messages received over serial to I haven't even gotten around to making it a command line option yet.
osc-led-test.plA simple demo that flashes the LEDs in various different ways. It requires the Net::OpenSoundControl perl module.
osc-send.plA perl script that sends an OSC message based on the arguments given.
xmms2-interface.plA script that connects to the xmms2 server process, reads the current song name, and prints it to the LCD on the device.
xmms2.pyA python script that listens for button presses and controls xmms2 via the command line xmms2 program.