I've been able to complete the software while I wait for the boards to arrive, so in the mean time, here is a rundown on the features I've built in:
- hours/minutes/seconds (with automatic DST adjustment)
- month/day of month
- week/day of week
- percent of day (per soixante really), with sunrise and sunset markers
- phase of the moon (latitude, longitude and time zone are hardcoded into firmware)
- spectrum (shifts one degree of hue every second)
- solid color (shifts one degree of hue every second)
- plasma (three random anchor points with random colour, changing every 1/2 second)
12 base colours with 5 colour harmonies:
- base colours are red, orange, yellow, chartreuse, green, spring green, cyan, azure, blue, violet, magenta, rose (i.e. every 30 degrees of hue)
- colour harmonies are complementary, analogous, split complementary, triadic, and tetradic
- for all harmonies except tetradic, the markers are white, the fill colour (e.g. hour) is the base colour, and the other colours depend on the harmony.
Controlled by re-purposed Apple remote (white):
- colour harmony is selected with select button
- base colour is selected with the up and down buttons
- mode is selected with left and right buttons
- date and time are set by pressing menu button, left and right button select Y, M, D, H, M, S
- remote can be paired and paired device ID is stored in an extra RTC register.
All of the time and ephemera calculations come courtesy of the Swfltek time library.
All of the code to drive the WS2811 strip at 8MHz is hand-crafted assembly (my first attempt at AVR assembly). It was inspired by this code which did not work properly for me (first LED was always wrong and it took 18 ms to update 60 leds intsead of 1.8 ms which caused flicker).