I just wanted to share some code that I've been working on for the last few months which is called MacroDuino (http://www.practicalmaker.com/projects/macroduino-project-page).
The basic idea was to create some code that would let you enable or disable some variables which would enable/disable different parts of the code, upload it to the arduino and configure a variety of different things over the serial monitor or ethernet.
I tried to break everything down into different groups. The first would be interfaces. Right now there are two (serial and ethernet). Basically you send a command to the arduino and this parses it and passes it to the control function. It's rather easy to add a new interface too, just include whatever libraries are needed and make sure you parse everything out except for the command. Than you just pass the command string to the control function.
Now comes the interesting part. There are to many commands to list, but I'll go over some of the neat ones.
- control digital pins (and set pinmode)
- read analog pins
- read ds18b20 temp sensors
- read ds1307 RTC (and set)
- LCD output (my own board, but can easily be ported to liquidcrystal) with configurable display options
- setup macros (analog/digital/temperature/time input) with digital pin/port expander output
- log analog/digital/temp readings to pachube
- webapp (http://www.practicalmaker.com/app/macroduino)... need a webkit browser to use correctly as it depends on sqlite to store settings (may change to localStorage)
The neat thing about the webapp is that it's hosted on my website so there's no need to host it locally. It uses jsonp to get around the same-origin policy with web browsers. jsonp was actually pretty easy to implement. All that was needed was to parse out the function name that jquery sent and print it back once the control function was finished.
There are still quite a few space improvements to be made to the code (I got a little lazy towards the end), but right now with everything + debug enabled its less than the space of the atmega 328. Disabling functions (ie. pachube) saves space and is done by changing variables in the main code. That way you can easily add your own stuff and still have everything fit onto a standard Arduino.