Thermostat class implements basic functionality of a thermostat

Revision:
0:cd3a00aa2dbc
Child:
1:909cb1aef872
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/thermostat.cpp	Thu Feb 13 08:07:46 2014 +0000
@@ -0,0 +1,123 @@
+#include "thermostat.h"
+//Thermostat class
+//Napoleon Leoni
+//Thermostat with Joystick control input
+//Class Thermostat: 
+//Has a control loop enable/disable(I will refer to this as Heater on/off), an over-ride enable/disable.
+//an object TemperatureRecording (keeps current temperature, max and min since last reset 
+//and circular buffer with recorded data)
+//Functions to check user input on joystick
+//sets interrupt on accelerometer (To be implemented)
+
+//regular constructor
+thermostat::thermostat(temperatureRecorder *ptrTrecord,joystickAppBoard *ptrinputJoystick,DigitalOut *ptrActuatorOutput){
+    //initialize class pointers and default settings
+    this->trecord=ptrTrecord;
+    this->trecord->setTemperatureToFarenheit(); //by default our thermostat will be in Farenheit
+    this->inputJoystick=ptrinputJoystick;
+    this->actuatorOutput=ptrActuatorOutput;
+    this->hysteresisGap=DEFAULTHYSTERESYS;
+    this->temperatureGranularity=DEFAULTGRANULARITY, 
+    this->defaultTemperature=DEFAULTTEMPSETTING;
+    this->maxTemperature=DEFAULTMAXTEMPSETTING;
+    this->minTemperature=DEFAULTMINTEMPSETTING;
+    this->heaterEnabled=false;
+    // set the time
+    
+    set_time(1256729737); //set default valid value to initialize
+    timeInSeconds = time(&(this->timeInSeconds));//Update time to current time
+}
+
+void thermostat::setDay(int month,int day,int year){
+    //Note to be implemented, Protection against out of range or invalid inputs
+    this->timeKeeper.tm_year=year;
+    this->timeKeeper.tm_year = this->timeKeeper.tm_year - 1900;
+    this->timeKeeper.tm_mon=month-1;
+    this->timeKeeper.tm_mday=day;
+    set_time(mktime(&(this->timeKeeper)));
+}
+
+void thermostat::setTime(int hour,int min,int sec){
+    //Note to be implemented, Protection against out of range or invalid inputs
+    this->timeKeeper.tm_hour=hour;
+    this->timeKeeper.tm_min=min;
+    this->timeKeeper.tm_sec=sec;
+    set_time(mktime(&(this->timeKeeper)));
+}
+
+//retutns the day and time as a string
+void thermostat::getDateandTime(char* buffer,int bufferSize){
+    //TODO: check size of inout buffer and reject if smaller than minimum required
+    timeInSeconds = time(&(this->timeInSeconds));//Update time to current time
+    strftime(buffer, bufferSize, "%c\n", localtime(&(this->timeInSeconds)));
+}
+
+void thermostat::enableHeater(void){
+    this->heaterEnabled=true;
+}
+
+void thermostat::disableHeater(void){
+    this->heaterEnabled=false;
+    this->heatingActionOn=false;        //turn off relay indicator as well as the thermostat is disabled
+    this->actuatorOutput->write(0);     //turn off relay as well as the thermostat is disabled
+}
+
+void thermostat::checkJoystickInput(void){
+    this->inputJoystick->readJoystick();
+    if(this->inputJoystick->isJoystickUp()){
+         if(this->defaultTemperature<this->maxTemperature){
+            this->defaultTemperature+=this->temperatureGranularity;//increase temp. setting 
+         } 
+    }
+    if(this->inputJoystick->isJoystickDown()){
+        if(this->defaultTemperature>this->minTemperature){
+            this->defaultTemperature-=this->temperatureGranularity;//decrease temp. setting   
+        }
+    }
+    if(this->inputJoystick->isJoystickLeft()){
+         this->disableHeater();//disable heater   
+    }
+    if(this->inputJoystick->isJoystickRight()){
+         this->enableHeater();//enable heater   
+    }
+    
+}
+
+void thermostat::runThermostatControlCycle(void){
+    //First read temperature values
+    this->trecord->makeReading(); //Make temperature reading;
+    if(this->heaterEnabled){ //the Thermostat heating loop is only run if it is enabled
+        //next compare aginst target within +/- 1/2 Hysteresis Gap window    
+        if(this->trecord->getTemperature() < (this->defaultTemperature - 0.5*hysteresisGap)){
+            this->heatingActionOn=true;
+            this->actuatorOutput->write(1); //turn on the relay driving digital output
+        }
+        
+        if(this->trecord->getTemperature() > (this->defaultTemperature + 0.5*hysteresisGap)){
+            this->heatingActionOn=false;        
+            this->actuatorOutput->write(0); //turn off the relay driving digital output           
+        }
+    }
+}
+
+float thermostat::getTemperature(void){
+    return this->trecord->getTemperature();
+}
+
+float thermostat::getMaxTemperature(){
+    return this->trecord->getMaxTemperature();
+}
+
+float thermostat::getMinTemperature(){
+    return this->trecord->getMinTemperature();
+}
+
+float thermostat::getTemperatureSetting(void){
+    return this->defaultTemperature;    
+}
+
+bool thermostat::getThermostatStatus(void){
+    if(this->heaterEnabled) return true;
+    //defaults to false
+    return false;   
+}
\ No newline at end of file