#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define setB 2
#define incB 3
#define decB 4
#define rel 5
float b=1, db=0, onDelay=1, offDelay=0;
LiquidCrystal_I2C lcd(0x27,20,4);
float pt,pTemp,offset=0,sTemp=250,d;
bool returnToLoop = false, fanVal=1;
void setup()
{
pinMode(setB, INPUT_PULLUP);
pinMode(incB, INPUT_PULLUP);
pinMode(decB, INPUT_PULLUP);
lcd.begin(20,4);
lcd.backlight();
lcd.setCursor(0,0);
// lcd.print("Hello World");
}
void loop()
{
start: // this start is used to come back to loope from the back function
d = sTemp-pTemp;
if(returnToLoop)
{
returnToLoop=false;
}
lcd.setCursor(0,0);
lcd.print("TechnoLYN Heat");
pt=analogRead(A0);
pTemp = (pt/1023)*500; // covert to V and multiply by 100 to convert to temp
pTemp = pTemp + offset;
lcd.setCursor(0,1);
lcd.print("PT: " + String(pTemp,1));
lcd.setCursor(10,1);
lcd.print("ST: " + String(sTemp,1));
lcd.setCursor(0,3);
lcd.print(" ");
delay(200);
if(pTemp>sTemp)
digitalWrite(rel,0);
if(pTemp<sTemp and d>b)
{
digitalWrite(rel,1);
}
if(d<b and d>0.33)
{
digitalWrite(rel,1);
delay(1000*d);
digitalWrite(rel,0);
delay((1000*1/d));
}
if(digitalRead(setB)==0)
{
l1:
if(digitalRead(setB)==1)
{
lcd.clear();
temp();
}
delay(50);
goto l1;
}
if(pTemp<sTemp)
heating();
else
{
lcd.setCursor(0,3);
lcd.print("Heater OFF ");
delay(300);
}
goto start;
}
void heating()
{
lcd.setCursor(0,3);
lcd.print("Heating");
delay(200);
lcd.print(" .");
delay(200);
lcd.print(".");
delay(200);
lcd.print("..");
delay(200);
}
void temp()
{
l1:
lcd.setCursor(0,0);
lcd.print(">Set Temperature");
lcd.setCursor(1,1);
lcd.print("Calibrate");
lcd.setCursor(1,2);
lcd.print("Set Band");
lcd.setCursor(1,3);
lcd.print("Set Dead Band");
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
timer();
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
setTemp();
}
goto l1;
}
void timer()
{
l2:
lcd.setCursor(1,0);
lcd.print("Set Temperature");
lcd.setCursor(0,1);
lcd.print(">Calibrate");
lcd.setCursor(1,2);
lcd.print("Set Band");
lcd.setCursor(1,3);
lcd.print("Set Dead Band");
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
band();
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
temp();
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
calibrate();
}
goto l2;
}
void band()
{
l3:
lcd.setCursor(1,0);
lcd.print("Set Temperature");
lcd.setCursor(1,1);
lcd.print("Calibrate");
lcd.setCursor(0,2);
lcd.print(">Set Band");
lcd.setCursor(1,3);
lcd.print("Set Dead Band");
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
deadBand();
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
timer();
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
setBand();
}
goto l3;
}
void deadBand()
{
l4:
lcd.setCursor(1,0);
lcd.print("Set Temperature");
lcd.setCursor(1,1);
lcd.print("Calibrate");
lcd.setCursor(1,2);
lcd.print("Set Band");
lcd.setCursor(0,3);
lcd.print(">Set Dead Band");
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
power();
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
band();
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
setDBand();
}
goto l4;
}
void power()
{
l4:
lcd.setCursor(0,0);
lcd.print(">Set Power");
lcd.setCursor(1,1);
lcd.print("Set Fan");
lcd.setCursor(1,2);
lcd.print("Back");
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
fan();
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
deadBand();
}
goto l4;
}
void fan()
{
l4:
lcd.setCursor(1,0);
lcd.print("Set Power");
lcd.setCursor(0,1);
lcd.print(">Set Fan");
lcd.setCursor(1,2);
lcd.print("Back");
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
back();
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
power();
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
setFan();
}
goto l4;
}
void back()
{
l4:
lcd.setCursor(1,0);
lcd.print("Set Power");
lcd.setCursor(1,1);
lcd.print("Set Fan");
lcd.setCursor(0,2);
lcd.print(">Back");
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
loop();
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
fan();
}
goto l4;
}
void setBand()
{
l4:
lcd.setCursor(0,0);
lcd.print("Band :" + String(b));
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
b=b-0.1;
lcd.print("Band :" + String(b));
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
b=b+0.1;
lcd.print("Band :" + String(b));
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
back();
}
goto l4;
}
void setDBand()
{
l4:
lcd.setCursor(0,0);
lcd.print("Dead Band :" + String(db));
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
db=db-0.1;
lcd.print("Dead Band :" + String(db));
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
db=db+0.1;
lcd.print("Dead Band :" + String(db));
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
back();
}
goto l4;
}
void setTemp()
{
l4:
lcd.setCursor(0,0);
lcd.print("Set Temp: " + String(sTemp,1));
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
sTemp--;
lcd.print("Set Temp: " + String(sTemp,1));
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
sTemp++;
lcd.print("Set Temp: " + String(sTemp,1));
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
back();
}
goto l4;
}
void calibrate()
{
l4:
lcd.setCursor(0,0);
lcd.print("Offset :" + String(offset));
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
offset=offset-0.5;
lcd.print("Offset :" + String(offset));
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
offset=offset+0.5;
lcd.print("Offset :" + String(offset));
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
back();
}
goto l4;
}
void setFan()
{
l4:
lcd.setCursor(0,0);
if(fanVal==1)
lcd.print("Active ON");
else
lcd.print("Active OFF");
if(digitalRead(decB)==0)
{
lcd.clear();
delay(200);
fanVal=0;
}
if(digitalRead(incB)==0)
{
lcd.clear();
delay(200);
fanVal=1;
}
if(digitalRead(setB)==0)
{
lcd.clear();
delay(200);
back();
}
goto l4;
}