Arduino Alarm clock with Temp and adjusted RH

I figured making a clock would be a good first start to really get to learn the Arduino. The clock uses the ds1307 RTC on the I2C bus, 3 Adafruit 7 segment 4 digit displays, a tmp36 temperature sensor, and a Honeywell HiH4001 Humidity sensor. The clock also has an alarm and a full library of 21 Ringtones.

The code makes extensive use of the millis() counter for responsiveness, the only section using delay() is the code that plays the ringtone as the alarm. Currently there are 21 select-able ringtones to choose from. The code is fairly modular and in theory the I2C Adafruit led backpacks could be swapped out with any other display fairly easily. The code is written using local variables where possible and makes extensive use of progmem to fit the entire library of ringtones on the flash. It pulls them into a buffer to play them. I also have used pointers where possible. There is an extensive menu system, adjustable brightness, 24/12 hour display code, and a temperature and humidity display.

Still pending is to save some of the menu settings into eeprom, in case the power is removed. However the time is saved due to the coin cell backup on the ds1307. So the eeprom would only be used to remember your ringtone for the alarm, alarm time, brightness, and display mode.

I know the code is not perfect and could probably be optimized. Doing this project has also made me realize that bit shifting is not to hard, and coding using the Plain Atmel libraries would have yielded smaller code and direct access to the timers could have allowed me to reduce power significantly over what its doing now. My next project I believe will be straight atmel libraries.

In any case I know clocks are an ever present beginner project on here so I figured I would post the link to the github repository in the hopes that other beginners might find it useful, and maybe some pros might fork it and show me how to really clean up the code. I feel like it is amateur quality at best.