// HVAC Controller Program R1.0
// By Marty Sockolov
// Set Variables
int LED = 38; // The digital pin to which the LED is connected
// INPUTS
int lrh1Pin = 22; //Living room heat, stage 1 is on pin 22
int lrh2Pin = 23; //Living room heat, stage 2
int lrc1Pin = 24; //Living room cooling, stage 1
int lrc2Pin = 25; //Living room cooling, stage 2
int lrfnPin = 26; //Living room fan
int oh1Pin = 27; //Office Heat
int oc2Pin = 28; //Office 2nd Stage Cooling
int mbrhPin = 29; //Master Bedroom Heat
int mbrcPin = 30; //Master Bedroom Cooling
int mbth1Pin = 31; //Master Bathroom Heat Stage 1
int mbthcPin = 32; //Master Bathroom Cooling
int bhhPin = 33; //Basement Heat Stage 1 (Hydronic)
int bhePin = 34; //Basement Heat Stage 2 (electric)
int bcPin = 35; //Basement Cooling
int bfnPin = 36; //Basement Fan
int onoffPin = 0; //all off
int sumwinPin = 1; //Hydronic Heat Pump Heat/Cool switchover
// Outputs
int pmp1Pin = 42; //Pump 1 is on pin 42
int pmp2Pin = 41; //Pump 2
int pmp3Pin = 40; //Pump 3
int pmpuPin = 5; //Upstairs Pump
int ahuPin = 4; //Upstairs air handler/AC
int valv1Pin = 3; //Zone 1 valves //Liv rm, dining, kitchen, entry
int valv2Pin = 2; //Zone 2 valves -master bed room and closet
int valv3Pin = 49; //Zone 3 valves -master bath
int valv4Pin = 48; //Zone 4 valves -office
int valvbPin = 47; //Basement heater valve
int valvuPin = 46; //Upstairs air handler valve
int bshtelec = 43; //Basement heater electric
int bshtfan = 44; //Basement heater fan
void setup() {
// setup pins
pinMode(LED, OUTPUT); //Declaring pin 13 (LED) as output pin
pinMode(22, INPUT); //sets pins as inputs
pinMode(23, INPUT);
pinMode(24, INPUT);
pinMode(25, INPUT);
pinMode(26, INPUT);
pinMode(27, INPUT);
pinMode(28, INPUT);
pinMode(29, INPUT);
pinMode(30, INPUT);
pinMode(31, INPUT);
pinMode(32, INPUT);
pinMode(33, INPUT);
pinMode(34, INPUT);
pinMode(35, INPUT);
pinMode(36, INPUT);
pinMode(0, INPUT); //set pin A0 as an input for on/off mode
pinMode(1, INPUT); //set pin A1 as an input for summer/winter mode
pinMode(42, OUTPUT); //sets pin as an output
digitalWrite(42, LOW); //sets default to off or “low” on startup
pinMode(41, OUTPUT);
digitalWrite(41, LOW);
pinMode(40, OUTPUT);
digitalWrite(40, LOW);
pinMode(5, OUTPUT);
digitalWrite(5, LOW);
pinMode(4, OUTPUT);
digitalWrite(4, LOW);
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
pinMode(49, OUTPUT);
digitalWrite(49, LOW);
pinMode(48, OUTPUT);
digitalWrite(48, LOW);
pinMode(47, OUTPUT); //basment heat valve
digitalWrite(47, LOW);
pinMode(46, OUTPUT);
digitalWrite(46, LOW);
pinMode(45, OUTPUT); // set pin 45 as output to geothermal heat pump for on/off mode
digitalWrite(45, LOW);
pinMode(44, OUTPUT); // set pin 44 as output for basement heater fan
digitalWrite(44, LOW);
pinMode(43, OUTPUT); // set pin 43 as output for basment heater (electric)
digitalWrite(43, LOW);
}
void loop()
// set up summer/winter and summer/winter changeover (controlled by dig input from Z-Wave controller)
//
//***Flash LED***
{
{
digitalWrite(LED, HIGH); //Turn ON the LED
delay(1000); //Wait for 1sec
digitalWrite(LED, LOW); // Turn off the LED
delay(1000); // Wait for 1sec
}
// ***on-off***
{
if (onoffPin == HIGH) {
digitalWrite(pmp1Pin, LOW); // if low turn off pumps and valves
// digitalWrite(pmp2Pin, LOW);
// digitalWrite(pmp3Pin, LOW);
// digitalWrite(valv1Pin, LOW);
// digitalWrite(valv2Pin, LOW);
// digitalWrite(valv4Pin, LOW);
// digitalWrite(valv4Pin, LOW);
}
}
//else {
//Do nothing
//}
// ***LIVING ROOM***
//If Living Room Heat 1 input is High, turn on Pumps 1,2,3 and zone valves 2,3,5,9,11 (zone 1), if low turn off
{
int lrh1result = digitalRead(22);
//digitalRead(lrh1result) //Read LR heating stage 1 and declare a variable
if (lrh1result == HIGH) {
digitalWrite(pmp1Pin, HIGH); // if high, turn on pumps and valves
digitalWrite(pmp2Pin, HIGH);
digitalWrite(pmp3Pin, HIGH);
digitalWrite(valv1Pin, HIGH);
}
else {
digitalWrite(pmp1Pin, LOW); // if low turn off pumps and valves
digitalWrite(pmp2Pin, LOW);
digitalWrite(pmp3Pin, LOW);
digitalWrite(valv1Pin, LOW); // pumps 1,2,3 and valves 2,3,5,9,11,
}
}
{
digitalRead(lrh2Pin); //LR heating stage 2 (upstairs unit)
if (lrh2Pin == HIGH) {
digitalWrite(pmpuPin, HIGH);
digitalWrite(valvuPin, HIGH);
digitalWrite(lrfnPin, HIGH);
} else {
digitalWrite(pmpuPin, LOW);
digitalWrite(valvuPin, LOW);
digitalWrite(lrfnPin, LOW);
}
}
{
digitalRead(lrc1Pin); //LR cooling stage 1 (Upstairs unit)
if (lrc1Pin == HIGH) {
digitalWrite(ahuPin, HIGH); //Upstairs air handler
digitalWrite(valvuPin, HIGH); //Upstairs Valve
digitalWrite(pmpuPin, HIGH); //Upstairs pump
} else {
digitalWrite(ahuPin, LOW); //Upstairs air handler
digitalWrite(valvuPin, LOW); //Upstairs Valve
digitalWrite(pmpuPin, LOW); //Upstairs pump
}
}
{
digitalRead(lrc2Pin); //LR cooling stage 2 (Hydronic)
if (lrc2Pin == HIGH) {
digitalWrite(pmp1Pin, HIGH); // if high, turn on pump and valves
digitalWrite(pmp2Pin, HIGH);
digitalWrite(pmp3Pin, HIGH);
digitalWrite(valv1Pin, HIGH);
} else {
digitalWrite(pmp1Pin, LOW); // if low, turn off pump and valves
digitalWrite(pmp2Pin, LOW);
digitalWrite(pmp3Pin, LOW);
digitalWrite(valv1Pin, LOW);
}
}
{
digitalRead(lrfnPin); //LR fan
if (lrfnPin == HIGH) {
digitalWrite(lrfnPin, HIGH);
} else {
digitalWrite(lrfnPin, LOW);
}
}
// ***OFFICE***
// Note: since cooling is controlled by living room t-stat, 1st stage cooling is not used. If second stage cooling is called, turn on hydronic.
{
//digitalRead(oh1Pin); // if office thermostat calling for heat
//digitalRead (sumwinPin); // and its winter
if (digitalRead(oh1Pin == HIGH) && digitalRead(sumwinPin == HIGH)) {
digitalWrite(pmp3Pin, HIGH);
digitalWrite(valv4Pin, HIGH); //turn on pump and valve
} else {
digitalWrite(pmp3Pin, LOW); // Otherwise turn off
digitalWrite(valv4Pin, LOW);
}
}
{
digitalRead(oc2Pin); // if office thermostat calling for 2nd stage cooling
digitalRead(sumwinPin); // and its summer turn on hydronic pump 3 and valve 4
if ((oc2Pin == HIGH) && (sumwinPin == LOW)) {
digitalWrite(pmp3Pin, HIGH);
digitalWrite(valv4Pin, HIGH);
} else {
digitalWrite(pmp3Pin, LOW); //if not turn off pump and valve
digitalWrite(valv4Pin, LOW);
}
//*****Basement******
{
digitalRead(bhhPin); //Basement heat stage 1 (Electric)
if (bhhPin == HIGH) {
digitalWrite(bshtelec, HIGH); //Basement heater on
} else {
digitalWrite(bshtelec, LOW); //Basement heater off
}
}
{
digitalRead(bhhPin); //Basement heat hydronic
if (bhhPin == HIGH) {
digitalWrite(valvbPin, HIGH); //Basement Valve
digitalWrite(pmp1Pin, HIGH); // Basement Pump
delay(90000); // delay fan until coil heats up for 90 seconds
digitalWrite(bshtfan, HIGH); //Basement fan
} else {
digitalWrite(pmp1Pin, LOW); //Pump off
digitalWrite(valvbPin, LOW); // Valve off
delay(20000); // continue fan for 20 seconds
digitalWrite(bshtfan, LOW); // Fan off
}
}
}
}