/* * BasicFlipClockLib.h * * Created: 8/7/2017 2:41:20 PM * Author : Spencer Hamblin * This is the main application code for the Basic Flip Clock designed and built by Spencer Hamblin * License : MIT, Do what ever you want with this code. But if you fuck it up it's on you. */ #define F_CPU 8000000UL #include #include #include //#include //#include //#include //#include #define I2C_RTC_WRITE 0b11010000 #define I2C_RTC_READ 0b11010001 #define I2C_GPIO_WRITE 0b01000000 #define I2C_GPIO_READ 0b01000001 #define I2C_MODE_NORMAL TWBR=32; #define I2C_MODE_FAST TWBR=2;//2 //Bit Order of Switches 0b:0,0,DOWN,UP,SET ALARM,SET TIME,LIGHT EN,ALARM EN #define ALM_BUT_MASK 0b00000100 #define TIME_BUT_MASK 0b00001000 #define UP_BUT_MASK 0b00010000 #define DOWN_BUT_MASK 0b00100000 #define ALM_SWITCH_MASK 0b00000001 #define LIGHT_SWITCH_MASK 0b00000010 #define DISPLAY_DELAY_MS 30 #define TIME_REGISTER_RTC 0x00 #define ALARM_REGISTER_RTC 0x07 #define setingTimeOut 8000//Value for alarm time out, at time of comment 4000 is about a minute #define lightTimeOut 40000//Value for light time out #define alarmTimeOut 1//Value for alarm time out in minutes #define maxBrightness 0xFFFF//16 bit value for maximum light level #define lightMinutesBeforeAlarm 60//Value of when to turn on light before alarm //Global Variables //Functions prototypes void initalSetUp(); uint8_t I2CStart(uint8_t address); uint8_t I2CDataSend(uint8_t address); uint8_t I2CDataRead(bool more); void I2CStop(); void delayS(unsigned int S); void delay_mS(unsigned int mS); void tone(unsigned int frequencey); void beep(unsigned int mS);//Loud beep intended for use as an alarm void chirp();//Soft beep intended to be used as an indicator of sorts void setLightsPercent(uint8_t brightness);//Set brightness based on 0-100% unsigned int timeDifferenceToBrightness(uint8_t seconds, uint8_t minutes, uint8_t hours, uint8_t alarmMinute,uint8_t alarmHour, uint8_t startBeforeMinutes, unsigned int max);//Converts difference between alarm time to brightness setting void setLight16Bit(unsigned int brightness);//Set brightness directly based on 16 bit input void getTime(uint8_t &seconds, uint8_t &minutes, uint8_t &hours, uint8_t rtcRegister); void setTime(uint8_t minutes, uint8_t hours, uint8_t rtcRegister); //void getAlarm(uint8_t &minutes, uint8_t &hours); //void setAlarm(uint8_t minutes,uint8_t hours); //bool timeWindowAfter(uint8_t startMinutes,uint8_t startHours,uint8_t movingMinutes,uint8_t movingHours,uint8_t windowRange);//Returns false if movingTime is out of range of startTime by more than windowRange bool timeWindowBefore(uint8_t startMinutes,uint8_t startHours,uint8_t movingMinutes,uint8_t movingHours,uint8_t windowRange);//Returns false if movingTime is out of range of startTime by more than windowRange uint8_t getSwitchState(); bool capSensor(); void simpleDispUpdate(uint8_t newDispState[10]); void displayUpdate(uint8_t *newDispState); void displayUpdate(uint8_t *newDispState, uint8_t *oldDispState); void displayUpdate(uint8_t *newDispState, uint8_t *oldDispState,bool smartEnable); void alarmStatUpdate(bool alarmState); void timeToDisplayFormat(uint8_t *newDispState, uint8_t minutes, uint8_t hours, bool alarmState); void setDisplay(uint8_t *newDispState, uint8_t &minutes, uint8_t &hours, uint8_t &oldMinutes, uint8_t &oldHours,bool alarmEn); void softAlarm(); //void systemTimeSet //void copyDispState(uint8_t *newDispState, uint8_t *oldDispState);//Copyies new to old