#define txEnable 2
#define Y_in 3
#define B_in 4
#define W_out 5
#define hpco 6
#define lpco 7
#define Y_out 8
#define B_out 9
#define D_out 10
#define HB 13
#define evap_NTC A0
#define ODT_NTC A1
#define CDT_NTC A2
float EST;
float ODT;
float CDT;
int page;
int paragraph;
int sentence;
int verb[10];
int noun;
// Timer_1 variables
int state;
unsigned int a;
int blink;
long offTime = 1000;
long onTime = 1000;
unsigned long previousMillis;
unsigned long currentMillis;
// Timer_2 variables
int trigger;
int cycle;
unsigned long dur; // milliseconds
long ofst;
void setup() {
Serial.begin(9600);
pinMode(txEnable, OUTPUT);
pinMode(Y_in, INPUT_PULLUP);
pinMode(B_in, INPUT_PULLUP);
pinMode(W_out, OUTPUT);
pinMode(hpco, INPUT_PULLUP);
pinMode(lpco, INPUT_PULLUP);
pinMode(Y_out, OUTPUT);
pinMode(B_out, OUTPUT);
pinMode(D_out, OUTPUT);
pinMode(HB, OUTPUT);
digitalWrite(txEnable, LOW);
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
page = 0;
paragraph = 0;
sentence = 0;
noun = 0;
for(int i = 0; i < 9; i++) {
verb[i] = 0;
}
trigger = 0;
cycle = 0;
currentMillis = millis();
dur = 5000;
}
void loop() {
// IDLE
while(page == 0) {
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
digitalWrite(HB, LOW);
NTC();
inputs();
timer_1();
if(blink == 1) {
if(noun == 0) {
NTC();
Serial.print("Evaporator ");
Serial.print(EST);
Serial.println("F");
Serial.print("ODT ");
Serial.print(ODT);
Serial.println("F");
Serial.print("CDT ");
Serial.print(CDT);
Serial.println("F");
noun = 1;
}
}
else if(blink == 0) {
noun = 0;
}
}
// COOLING
while(page == 1) {
paragraph = 1;
while(paragraph == 1) {
trigger = 1;
dur = 10000;
timer_2();
paragraph = 2;
}
while(paragraph == 2) {
timer_2();
if(cycle == 1){
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
digitalWrite(HB, HIGH);
}
else if(cycle == 0) {
paragraph = 3;
}
}
while(paragraph == 3) {
inputs();
if(page != 1) {
page = 0;
paragraph = 1;
break;
}
NTC();
if(ODT < 50.0) {
if(CDT < 100) {
digitalWrite(D_out, LOW);
}
else if(CDT > 100) {
digitalWrite(D_out, HIGH);
}
digitalWrite(W_out, LOW);
digitalWrite(Y_out, HIGH);
digitalWrite(B_out, LOW);
}
else if(ODT > 50.0) {
digitalWrite(W_out, LOW);
digitalWrite(Y_out, HIGH);
digitalWrite(B_out, LOW);
digitalWrite(D_out, HIGH);
}
timer_1();
digitalWrite(HB, a);
}
}
// HEATING
while(page == 2) {
paragraph = 1;
while(paragraph == 1) {
trigger = 1;
dur = 10000;
timer_2();
paragraph = 2;
}
while(paragraph == 2) {
timer_2();
if(cycle == 1){
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, HIGH);
digitalWrite(D_out, LOW);
digitalWrite(HB, HIGH);
}
else if(cycle == 0) {
paragraph = 3;
sentence = 1;
}
}
while(paragraph == 3) {
inputs();
if(page != 2) {
page = 0;
paragraph = 1;
break;
}
NTC();
if((EST <= 32.0) && (sentence == 1)) {
trigger = 1;
dur = 6000;
timer_2();
sentence = 2;
}
if(sentence == 2) {
timer_2();
if((cycle == 0) && (EST <= 32)) {
page = 3;
paragraph = 1;
sentence = 1;
break;
}
}
digitalWrite(W_out, LOW);
digitalWrite(Y_out, HIGH);
digitalWrite(B_out, HIGH);
digitalWrite(D_out, HIGH);
digitalWrite(HB, HIGH);
timer_1();
digitalWrite(HB, a);
}
}
// DEFROST
while(page == 3){
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
digitalWrite(HB, HIGH);
delay(10000);
if(paragraph == 1) {
trigger = 1;
dur = 300000;
timer_2();
paragraph = 2;
}
while(paragraph == 2) {
inputs();
if(page != 2) {
paragraph = 3;
}
else if(page == 2) {
page = 3;
}
NTC();
if(EST <= 32) {
page = 3;
}
else if(EST >= 47) {
paragraph = 3;
}
timer_2();
if(cycle == 0) {
paragraph = 3;
}
digitalWrite(W_out, HIGH);
digitalWrite(Y_out, HIGH);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
timer_1();
digitalWrite(HB, a);
}
while(paragraph == 3) {
digitalWrite(W_out, HIGH);
digitalWrite(Y_out, LOW);
delay(2000);
digitalWrite(B_out, LOW);
digitalWrite(D_out, HIGH);
digitalWrite(HB, HIGH);
delay(20000);
trigger = 1;
dur = 1;
timer_2();
page = 0;
break;
}
}
// E-STOP
while(page == 91){
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
for(int i = 0; i < 5; i++) {
digitalWrite(HB, HIGH);
delay(250);
digitalWrite(HB, LOW);
delay(250);
}
delay(1000);
}
// HIGH PRESSURE CUT OUT
while(page == 101) {
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
digitalWrite(HB, LOW);
paragraph = 1;
while(paragraph == 1) {
Serial.println(verb[1]);
verb[1] = verb[1] + 1;
if(verb[1] > 5) {
paragraph = 2;
}
else if(verb[1] <= 5) {
paragraph = 3;
}
}
while(paragraph == 2) {
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
digitalWrite(HB, LOW);
Serial.println("HPCO Hard Lockout");
for(int i = 0; i < 7; i++) {
digitalWrite(HB, HIGH);
delay(250);
digitalWrite(HB, LOW);
delay(250);
}
delay(1000);
}
while(paragraph == 3) {
Serial.println("HPCO Soft Lockout");
Serial.println(verb[1]);
for(int i = 0; i < 72; i++) {
for(int i = 0; i < 3; i++) {
digitalWrite(HB, HIGH);
delay(250);
digitalWrite(HB, LOW);
delay(250);
}
delay(1000);
}
page = 0;
break;
}
}
// LOW PRESSURE CUT OUT
while(page == 102){
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
digitalWrite(HB, LOW);
paragraph = 1;
while(paragraph == 1) {
Serial.println(verb[2]);
verb[2] = verb[2] + 1;
if(verb[2] > 8) {
paragraph = 2;
}
else if(verb[2] <= 8) {
paragraph = 3;
}
}
while(paragraph == 2) {
digitalWrite(W_out, LOW);
digitalWrite(Y_out, LOW);
digitalWrite(B_out, LOW);
digitalWrite(D_out, LOW);
digitalWrite(HB, LOW);
Serial.println("LPCO Hard Lockout");
for(int i = 0; i < 8; i++) {
digitalWrite(HB, HIGH);
delay(250);
digitalWrite(HB, LOW);
delay(250);
}
delay(1000);
}
while(paragraph == 3) {
Serial.println("LPCO Soft Lockout");
Serial.println(verb[2]);
for(int i = 0; i < 60; i++) {
for(int i = 0; i < 4; i++) {
digitalWrite(HB, HIGH);
delay(250);
digitalWrite(HB, LOW);
delay(250);
}
delay(1000);
}
page = 0;
break;
}
}
}
void inputs() {
if((digitalRead(hpco) == HIGH) && (digitalRead(lpco) == LOW)) {
page = 91;
}
else if((digitalRead(hpco) == LOW) && (digitalRead(lpco) == HIGH)) {
page = 102;
}
else if((digitalRead(hpco) == HIGH) && (digitalRead(lpco) == HIGH)) {
page = 101;
}
else if((digitalRead(hpco) == LOW) && (digitalRead(lpco) == LOW)) {
if(digitalRead(Y_in) == LOW) {
if(digitalRead(B_in) == LOW) {
page = 2;
}
else if(digitalRead(B_in) == HIGH) {
page = 1;
}
}
else if(digitalRead(Y_in) == HIGH) {
page = 0;
}
}
}
void NTC() {
const int beta = 3950;
float read_1;
float read_2;
float read_3;
float celsius;
read_1 = 0.0;
read_2 = 0.0;
read_3 = 0.0;
for(int i = 0; i < 10; i++) {
read_1 = (read_1 + analogRead(A0));
delay(5);
}
float average_1 = (read_1 / 10);
for(int i = 0; i < 10; i++) {
read_2 = read_2 + analogRead(A1);
delay(5);
}
float average_2 = (read_2 / 10);
for(int i = 0; i < 10; i++) {
read_3 = read_3 + analogRead(A2);
delay(5);
}
float average_3 = (read_3 / 10);
celsius = 1 / (log(1 / (1023. / average_1 - 1)) / beta + 1.0 / 298.15) - 273.15;
EST = ((celsius * 1.8) + 32);
celsius = 1 / (log(1 / (1023. / average_2 - 1)) / beta + 1.0 / 298.15) - 273.15;
ODT = ((celsius * 1.8) + 32);
celsius = 1 / (log(1 / (1023. / average_3 - 1)) / beta + 1.0 / 298.15) - 273.15;
CDT = ((celsius * 1.8) + 32);
}
void timer_1() {
currentMillis = millis();
if ((a == HIGH) && (currentMillis - previousMillis >= offTime)) {
a = LOW;
previousMillis = currentMillis;
blink = 1;
}
else if((a == LOW) && (currentMillis - previousMillis >= onTime)) {
a = HIGH;
previousMillis = currentMillis;
blink = 0;
}
}
void timer_2() {
currentMillis = millis();
if(trigger == 1) {
ofst = currentMillis;
trigger = 0;
}
if(currentMillis < (ofst + dur)) {
cycle = 1;
}
if(currentMillis > (ofst + dur)) {
cycle = 0;
}
}