Hi Guys,
Im currently working on a type of temperature controller.
Most of which does seem to worl besides a couple of little things.
On the heating side, everything stages up fine but as it drops back to relay 1 it stays on even though the temperature is below the 28 degrees.
Would anyone have any idea as to why after the relay1 is activated above 28 degrees it does not go off again when it falls below the 28 degrees?
Sorry Im new to all this and trying to learn.
#include <LiquidCrystal.h>
#include <DallasTemperature.h>
#include <Wire.h>
#define RELAY_ON 1
#define RELAY_OFF 0
#define RELAY_1 14 //Relay 1 pin
#define RELAY_2 15 //Relay 2 pin
#define sensorsA supplyAir //sensorA defined as supplyAir
#define sensorsB returnAir //sensorB defined as returnAir
const byte oneWireAPin = 18;
const byte oneWireBPin = 19;
const int diffCool = 2; //differentail to determine cooling mode
const int diffHeat = 2; //differentail to determine cooling mode
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
OneWire oneWireA (oneWireAPin);
OneWire oneWireB (oneWireBPin);
DallasTemperature supplyAir (&oneWireA) ;
DallasTemperature returnAir (&oneWireB) ;
void setup()
{
pinMode(RELAY_1,OUTPUT); // relay one pin
pinMode(RELAY_2,OUTPUT); // realy two pin
digitalWrite(RELAY_1,RELAY_OFF);
digitalWrite(RELAY_2,RELAY_OFF);
supplyAir.begin();
returnAir.begin();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("AC DRED Control");
lcd.setCursor(0, 1);
lcd.print("Starting FW:1.0");
delay(5000);
lcd.clear();
lcd.setCursor(2, 2);
lcd.print("Please Wait");
delay(5000);
lcd.clear();
}
void loop()
{
supplyAir.requestTemperatures();
returnAir.requestTemperatures();
float tempC1 = supplyAir.getTempCByIndex(0);
lcd.setCursor(0, 0);
lcd.print("Supply Air:");
lcd.println(tempC1);
float tempC2 = returnAir.getTempCByIndex(0);
lcd.setCursor(0, 1);
lcd.print("Return Air:");
lcd.println(tempC2);
delay(2000); //delay 2000ms
//if sensorA is less than sensorB by (diffCool = 5)
if (supplyAir.getTempCByIndex(0) < (returnAir.getTempCByIndex(0)-diffCool)) {
lcd.setCursor(0, 1); // Cursor position
lcd.print("Cooling Mode "); // Display Cooling Mode on LCD
delay(2000); //delay 2000ms
}
if (supplyAir.getTempCByIndex(0) <15) {
digitalWrite(RELAY_1,RELAY_ON);
digitalWrite(RELAY_2,RELAY_OFF);
delay(2000); //delay 2000ms
}
if (supplyAir.getTempCByIndex(0) <10) {
digitalWrite(RELAY_1,RELAY_OFF);
digitalWrite(RELAY_2,RELAY_ON);
delay(2000); //delay 2000ms
}
//if sensorA is greater than sensorB by (diffHeat = 5)
if (supplyAir.getTempCByIndex(0) > (returnAir.getTempCByIndex(0)+diffHeat)) {
lcd.setCursor(0, 1);
lcd.print("Heating Mode "); // Display heating mode on LCD
delay(2000); //delay 2000ms
}
//if sensorA is greater than or equal to 28 degrees and below 33 degrees, turn on relay 1 and turn off relay 2
if (supplyAir.getTempCByIndex(0) >=28 && (returnAir.getTempCByIndex(0) <33)) {
digitalWrite(RELAY_1,RELAY_ON); // Turn on relay 1
digitalWrite(RELAY_2,RELAY_OFF); // Turn off relay 2
delay(2000); //delay 2000ms
}
else{ //if temperatures are below 28 degrees then no relays should be activated.
digitalWrite(RELAY_1,RELAY_OFF); // Turn relay off
digitalWrite(RELAY_2,RELAY_OFF); // Turn relay off
}
//if sensorA is greater than 33 degrees, turn off relay 1 and turn on relay 2
if (supplyAir.getTempCByIndex(0) >=33) {
digitalWrite(RELAY_1,RELAY_OFF); //Turn off relay 1
digitalWrite(RELAY_2,RELAY_ON); // Turn on relay 2
delay(2000); // delay 2000ms
}
lcd.clear(); //Clear display before restrating loop
}